EIP=0x41414141

hacking, reversing and other stuff

May 4, 2023 - 2 minute read - ssh github multiple repositories different accounts

Manage multiple Github accounts under the same user

I recently got a github account from my employer. So now i do have two github account, my private one and my work account.

Sometimes i do work on my work machine but want to update some source that is under my private github account. This does not work, at least not out of the box, since on my work machine also my github work account is configured. Github, off course, does not allow my work account to update a repository from my private account.

I solved the problem by:

  • adding a ssh key which is allowed to alter to my private account, onto my work machine.
  • adding a alias into ssh config
  • change the git URL in my private repositories (on my work machine) to match the alias (from ssh config)

Here are the details:

adding a new (private) ssh key

The SSH Key id_ed25519_analyzr3 is one that is permitted to access my private account. in my ~/.bashrc i make sure it gets loaded into the ssh agent when i login or start a bash shell. This i do with the following line. You can also do this manually each time you need to.

ssh-add ~/.ssh/id_ed25519_analyzr3

adding an alias into ~/.ssh/config

The second step is to add a host alias into my ssh config file, usually located at ~/.ssh/config.

Host scusi-github.com
	HostName github.com
	IdentityFile ~/.ssh/id_ed25519_analyzr3
        User git

change origin URL in repository git config

The last step is to change the local git config file of my (private) repository, to match my alias just added to my ssh config.

So i change the origin url from git@github.com:scusi/SomeRepo.git into git@scusi-github.com:scusi/SomeRepo.git The relevant part looks like this, after editing

[remote "origin"]
        url = git@scusi-github.com:scusi/SomeRepo.git

That’s it. Now i can work as normal on my work machine and update work related repositories as before. When i work on a repository from my private account i just clone it, change the URL to match the ssh config alias and that’s it. A git push works as normal, but under the hood authenticates useing a different ssh key, which is has the neccessary permissions.

Jan 3, 2022 - 3 minute read - deutsch linux fdisk newbie

Manuelles Einbinden von Windows Festplatten unter Linux

Dieses Posting erklärt wie man eine Festplatte von Hand in Linux einbindet.

Die richtige Festplatte finden

Die erste Frage die sich stellt ist: Wie finde ich die Festplatte welche ich einbinden möchte. Dazu ist es zunächst ratsam den Befehl sudo fdisk -l auszuführen. Dieser Befehl listet alle am System angeschlossenen Festplatten auf. Wichtig hierbei ist dass die externe Festplatte NOCH NICHT an das System angeschlossen ist.

Die Ausgabe sieht ähnlich wie im folgenden Beispiel aus. Aus Gründen der Übersichtlichkeit zeigt das folgende Listing nur eine Festplatte mit 3 Partitionen. In der Praxis haben moderne Rechner eine vielzahl von Festplatten welche mit dem fdisk -l Befehl aufgelistet werden. Nützliche Hinweisgeber um die Datenträger zweifelsfrei zu identifizieren sind: der Modellname und die Größe. Im folgenden Beispiel wären dass also Samsung SSD 960 PRO 2TB bzw. 1,88 TiB.

$> sudo fdisk -l
[...]
Festplatte /dev/nvme0n1: 1,88 TiB, 2048408248320 Bytes, 4000797360 Sektoren
Festplattenmodell: Samsung SSD 960 PRO 2TB                 
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
Festplattenbezeichnungstyp: gpt
Festplattenbezeichner: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

Gerät           Anfang       Ende   Sektoren Größe Typ
/dev/nvme0n1p1    2048    1050623    1048576  512M EFI-System
/dev/nvme0n1p2 1050624    2549759    1499136  732M Linux-Dateisystem
/dev/nvme0n1p3 2549760 4000796671 3998246912  1,9T Linux-Dateisystem
[...]

Danach schließt man die externe Festplatte an welche man einbinden möchte und schaltet diese ein, falls nötig. Anschließend führt man den Befehl sudo fdisk -l erneut aus und achtet auf die Unterschiede. Im folgenden eine Beispielausgabe. Deine Ausgabe wird nicht identisch sein, aber ähnlich.

$> sudo fdisk -l
[...]
Festplatte /dev/nvme0n1: 1,88 TiB, 2048408248320 Bytes, 4000797360 Sektoren
Festplattenmodell: Samsung SSD 960 PRO 2TB                 
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
Festplattenbezeichnungstyp: gpt
Festplattenbezeichner: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

Gerät           Anfang       Ende   Sektoren Größe Typ
/dev/nvme0n1p1    2048    1050623    1048576  512M EFI-System
/dev/nvme0n1p2 1050624    2549759    1499136  732M Linux-Dateisystem
/dev/nvme0n1p3 2549760 4000796671 3998246912  1,9T Linux-Dateisystem
[...]
Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xXXXXXXXX

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1             128     2091135     1045504    7  HPFS/NTFS/exFAT
[...]

Im obigen Beispiel ist unsere neue Festplatte das Gerät /dev/sdb. Dieses Gerät hat eine Partition (/dev/sdb1) mit einem Windows Dateisystem. Das ist die Festplatte bzw. Partition die wir einbinden möchten.

Einen Einbindepunkt erstellen

Zunächst müssen wir einen Einbindepunkt erstellen. Unter diesem Verzeichnis wird die Festplatte im nächsten Schritt eingebunden. Im folgenden Beispiel heißt der Einbindepunkt windowsplatte, den Namen kann man frei wählen, einzige Vorraussetzung ist dass es dieses Verzeichnis nicht schon existiert.

$> sudo mkdir -p /media/windowsplatte

Eine Partition read-only einbinden

Zunächst ist es immer ratsam eine Festplatte nur read-only einzubinden. So kann man nicht aus versehen Daten zerstören.

$> sudo mount -o ro -t ntfs /dev/sdb1 /media/windowsplatte

Eine Partition read-write einbinden

Wenn die Festplatte zuvor read-only eingebunden wurde, wie oben beschreiben, dann kann man die Einbindung in eine read-write Einbundung wie folgt ändern:

$> sudo mount -o remount,rw -t ntfs /media/windowsplatte

Wurde die Festplatte zuvor NICHT eingebunden geht es so:

$> sudo mount -t ntfs /dev/sdb1 /media/windowsplatte

Ausbinden der Festplatte

Nach getaner Arbeit will man die Festplatte wider ausbinden. Dieses Vorgehen ist unabhängig davon ob die Festplatte/Partition read-only oder read-write eingebunden wurde. So geht es:

$> sudo umount /media/windowsplatte

Dec 31, 2021 - 2 minute read - dfir desinfect vhdx AV

Vhdx on Desinfect

I recently had the case that i wanted to scan a image of a virtualized domain controler (DC) with desinfect. I got the VHDX image of the virtualized DC on a NTFS formated harddrive.

In this article i will explain how to use desinfect with VHDX Images for virtual hosts.

install required software on desinfect

There are two software packages that are required: qemu-utils and nbd-client. The first one is already present in desinfect, the second one needs to be installed manually. You can download the debian package of nbd-client from https://packages.ubuntu.com/focal/nbd-client, choose the variant of the computer architecture you are useing, usually amd64.

For AMD64 architecture you can do the following, in order to download and install the nbd-client package:

cd ~/Downloads
wget -O -J http://de.archive.ubuntu.com/ubuntu/pool/universe/n/nbd/nbd-client_3.20-1_amd64.deb
sudo dpkg -i nbd-client_3.20-1_amd64.deb

Download the mount and umount script

You have two options to download the vhdx mount and umount scripts. Either you are useing git, as explaind in the follwoing section or you just download them from the raw gist manually, as explained in the other section below.

useing git

cd ~/Downloads
git clone https://gist.github.com/86cc5ba5dfbb694d7ccf675d735541b7.git vhdx_mount

manaually download

mkdir -p ~/Downloads/vhdx_mount
cd ~/Downloads/vhdx_mount
wget -O -J https://gist.githubusercontent.com/scusi/86cc5ba5dfbb694d7ccf675d735541b7/raw/0fbeb531caa4f4f7bd1b4c91bd9b1f444cbe2769/mount_vhdx.sh
wget -O -J https://gist.githubusercontent.com/scusi/86cc5ba5dfbb694d7ccf675d735541b7/raw/0fbeb531caa4f4f7bd1b4c91bd9b1f444cbe2769/unmount_vhdx.sh

mount the harddrive with the VHDX Images

I assume a few things for the following example:

  • your harddrive that contains the VHDX Images is /dev/sdd1 in your system.
  • the harddrive has an NTFS filesystem
  • the mount point you mount this harddrive to is /mnt/my_drive.

You need to adjust the above assumptions according to your preferences and actual values.

sudo mkdir -p /mnt/my_drive
sudo mount -t ntfs /dev/sdd1 /mnt/my_drive

mount the VHDX image

sudo mkdir -p /mnt/vhdx_mountpoint
sudo ~/Downloads/vhdx_mount/mount_vhdx.sh /mnt/my_drive/my_vhdx_image.vhdx /mnt/vhdx_mountpoint

scan the VHDX image or parts thereof

Now you can start a normal scan process to scan the content of the mounted vhdx image or a part thereof. Choose to scan a folder and navigate to /mnt/vhdx_mountpoint or any directory underneth of it.

desinfect choose folder to scan

happy hunting with desinfect!

Sep 20, 2019 - 1 minute read - tipps and tricks

How to resume a scp transfer

You may had the situation yourself, you have a huge file beeing transfered via scp and suddenly the connection drops. It would be cool if one could resume the transfer, so you do not have to transfer the whole file again but only what is missing on your end.

You can do that with rsync.

For example you did run the follwoing scp command:

scp bob@aliceserver.org:/data/huge.tar.gz

Then you can resume the transfer with rsync like this:

rsync -P -rsh=ssh bob@aliceserver.org:/data/huge.tar.gz ./huge.tar.gz

Cool, isn’t it?

Aug 16, 2017 - 1 minute read - unzip Office OpenXML golang tool

unpack Office OpenXML files

I often have to dig into Office OpenXML files (docx, xlsx, pptx). There is a bunch of reasons why i do not want to use unzip for this. For example:

  • some unzip implementations require the file to have a ‘.zip’ extension.
  • some unzip codebase is not maintained proper and has known but unfixed vulns.
  • unzip does not write to a meaningful local directory without extra argument passed.

Because of all the above and some more points i decided to write unzipOpenXML

Happy Hacking

Aug 11, 2017 - 1 minute read - Apple Tool IT-Security

Mac Security Tools

Patrick Wardle, Chief Security Researcher of R&D at Synack offers a bunch of usefull and easy to use security tools for macOS.

Here i do present the ones i find most usefull, but there is more, check it out on https://objective-see.com/products.html.

Oversight

Have you ever asked yourself if the microphone and/or the webcam on your Mac is really off or if it is remote controlled by an attacker and spies on you? With Oversight you will find out whenever some software tries to access your webcam and/or microphone. More Info

KnockKnock

Do you really know what is installed on your Mac and what is loaded when your mac starts, or when you login? Find out with KnockKnock

KextViewr

Do you know what modules are loaded into the Kernel of your Mac? With KextViewr you can find out

TaskExplorer

What Processes run on my Mac, what libraries they have loaded, what network connections they to have? With TaskExplorer you can find out

May 17, 2017 - 12 minute read - ransomware jaff decryptor system W32.Ransomware.Jaff dfir

Invoice 622476180

Today i got an email with the subject Invoice 622476180 05/17/2017 that had the following PDF attached:

Checksums for Invoice 622476180 05_17_2017.PDF:
MD5      (Invoice 622476180 05_17_2017.PDF): 14d05276125e70d43e710ef186261c95
SHA1     (Invoice 622476180 05_17_2017.PDF): 7d6606542484d7b50ccfdb1d4fa310f679bf6ba4
SHA256   (Invoice 622476180 05_17_2017.PDF): e60a621321fc670f0cac092a01281dd599a6f2fc20651ebc530c0a9912e666c6
Blake2s  (Invoice 622476180 05_17_2017.PDF): 0fca6361af4c77031f79446a86bb1ed1646b85d80cae1f368d9a41fd2cd5d892
Blake2b2 (Invoice 622476180 05_17_2017.PDF): 6316fd526699ce342bd8a2ebae14d3275693e79ed244a787360d2089aa7c9885

VirusTotal told me it is malicious and known:

14d05276125e70d43e710ef186261c95 [11/55] IS KNOWN by VirusTotal
Engine 'McAfee-GW-Edition' (Version v2015) detects as 'Artemis', since update 20170516
Engine 'ZoneAlarm' (Version 1.0) detects as 'HEUR:Trojan-Downloader.Script.Generic', since update 20170517
Engine 'NANO-Antivirus' (Version 1.0.76.16894) detects as 'Trojan.Ole2.Vbs-heuristic.druvzi', since update 20170517
Engine 'Qihoo-360' (Version 1.0.0.1120) detects as 'virus.office.obfuscated.1', since update 20170517
Engine 'Symantec' (Version 1.3.1.0) detects as 'Trojan.Pidief', since update 20170517
Engine 'Fortinet' (Version 5.4.233.0) detects as 'WM/TrojanDownloader.7A51!tr', since update 20170517
Engine 'CAT-QuickHeal' (Version 14.00) detects as 'O97M.Downloader.AJK', since update 20170517
Engine 'McAfee' (Version 6.0.6.653) detects as 'Artemis!14D05276125E', since update 20170517
Engine 'Panda' (Version 4.6.4.2) detects as 'O97M/Downloader', since update 20170516
Engine 'Rising' (Version 28.0.0.1) detects as 'Heur.Macro.Downloader.d (classic) ', since update 20170517
Engine 'Ikarus' (Version 0.1.5.2) detects as 'Trojan-Downloader.VBA.Agent', since update 20170517

PDFid indicated that it is indeed suspicious:

PDFiD 0.2.1 Invoice 622476180 05_17_2017.PDF
 PDF Header: %PDF-1.4
 obj                   15
 endobj                15
 stream                 4
 endstream              4
 xref                   1
 trailer                1
 startxref              1
 /Page                  1
 /Encrypt               0
 /ObjStm                0
 /JS                    2 << Javascript
 /JavaScript            3 << Javascript
 /AA                    0
 /OpenAction            1 << action on opening the PDF
 /AcroForm              0
 /JBIG2Decode           0
 /RichMedia             0
 /Launch                0
 /EmbeddedFile          1 << file embedded
 /XFA                   0
 /Colors > 2^24         0

Actually the PDF contains 2 scripts (script_-1468562363504637198.js, script_-2641379014723298464.js) and an Office document (docm) file.

Checksums for attached_ZLOYY.docm:
MD5      (attached_ZLOYY.docm): 6cdc2649cba1a042f2db4e49ffcdfb6b
SHA1     (attached_ZLOYY.docm): f6b74cf99e7f43bec841cb72f393b787df2e811d
SHA256   (attached_ZLOYY.docm): 635d562c684e49247af1939380a662e3630c0bc675cf71bcbb13577a3f772fde
Blake2s  (attached_ZLOYY.docm): 8c7079c3d0c50369f0a0a9bf10a18db90feb454008e29e378b371f79a54df5e0
Blake2b2 (attached_ZLOYY.docm): 502131858d04bf07a21a73250df900f6adfa6d1d52437b72e70c49fe50361c70

6cdc2649cba1a042f2db4e49ffcdfb6b [8/58] IS KNOWN by VirusTotal
Engine 'NANO-Antivirus' (Version 1.0.76.16894) detects as 'Trojan.Ole2.Vbs-heuristic.druvzi', since update 20170517
Engine 'Qihoo-360' (Version 1.0.0.1120) detects as 'virus.office.obfuscated.1', since update 20170517
Engine 'TrendMicro' (Version 9.740.0.1012) detects as 'HEUR_VBA.O2', since update 20170517
Engine 'ZoneAlarm' (Version 1.0) detects as 'HEUR:Trojan-Downloader.Script.Generic', since update 20170517
Engine 'Ikarus' (Version 0.1.5.2) detects as 'Trojan-Downloader.VBA.Agent', since update 20170517
Engine 'Panda' (Version 4.6.4.2) detects as 'O97M/Downloader', since update 20170516
Engine 'Fortinet' (Version 5.4.233.0) detects as 'WM/TrojanDownloader.7A51!tr', since update 20170517
Engine 'CAT-QuickHeal' (Version 14.00) detects as 'O97M.Downloader.AJK', since update 20170517

Basically when the PDF is opened by a viewer it will launch the embedded docm file. The docm file again contains scripts that will be executed when launched. The scripts within the docm file trigger the download of the actual malicious payload from the following URL http://evasalome.nl/hjt67t.

What is downloaded from the before mentioned URL is not directly executable, it is somehow obfuscated. Lets have a look at the file:

00000000  1c 1d d9 70 7a 6b 4f 47  57 5a 37 4f ae 8f 68 5a  |...pzkOGWZ7O..hZ|
00000010  fc 4e 73 6e 41 68 47 30  16 41 4d 71 6c 4f 47 68  |.NsnAhG0.AMqlOGh|
00000020  51 47 49 70 79 6b 4f 47  53 5a 37 4f 51 70 68 5a  |QGIpykOGSZ7OQphZ|
00000030  44 4e 73 6e 41 68 47 30  56 41 4d 71 ec 4f 47 68  |DNsnAhG0VAMq.OGh|
00000040  5f 58 f3 7e 79 df 46 8a  72 e2 36 03 9c 51 3c 32  |_X.~y.F.r.6..Q<2|
00000050  2d 3d 53 1e 33 07 20 42  37 2c 6d 12 0d 21 29 07  |-=S.3. B7,m..!).|
00000060  25 67 2b 15 59 19 3a 29  73 33 59 6f 15 3f 3b 7a  |%g+.Y.:)s3Yo.?;z|
00000070  29 21 17 0b 6f 65 4a 3a  72 41 4d 71 6c 4f 47 68  |)!..oeJ:rAMqlOGh|
00000080  01 02 49 70 35 6a 4b 47  bb e8 2e 16 51 70 68 5a  |..Ip5jKG....QphZ|
00000090  44 4e 73 6e a1 68 48 31  5d 40 4b 71 6c ef 46 68  |DNsn.hH1]@Kql.Fh|
000000a0  51 97 48 70 79 6b 4f 47  4f fc 36 4f 51 60 68 5a  |Q.HpykOGO.6OQ`hZ|
000000b0  44 fe 72 6e 41 68 07 30  56 51 4d 71 6c 5f 47 68  |D.rnAh.0VQMql_Gh|
000000c0  55 47 49 70 79 6b 4f 47  57 5a 37 4f 51 70 68 5a  |UGIpykOGWZ7OQphZ|
000000d0  44 ce 70 6e 41 78 47 30  d7 bc 4f 71 6e 4f 47 68  |D.pnAxG0..OqnOGh|
000000e0  51 47 59 70 79 7b 4f 47  53 5a 27 4f 51 60 68 5a  |QGYpy{OGSZ'OQ`hZ|
000000f0  44 4e 73 6e 51 68 47 30  56 41 4d 71 6c 4f 47 68  |DNsnQhG0VAMqlOGh|
00000100  2d fd 48 70 7d 6a 4f 47  53 3a 34 4f 51 6d 68 5a  |-.Hp}jOGS:4OQmhZ|
00000110  44 4e 73 6e 41 68 47 30  56 41 4d 71 6c 4f 47 68  |DNsnAhG0VAMqlOGh|
00000120  51 47 49 70 79 6b 4f 47  53 5a 37 4f 51 70 68 5a  |QGIpykOGSZ7OQphZ|
00000130  44 4e 73 6e 41 68 47 30  56 41 4d 71 6c 4f 47 68  |DNsnAhG0VAMqlOGh|
00000140  51 47 49 70 79 6b 4f 47  53 5a 37 4f 51 70 68 5a  |QGIpykOGSZ7OQphZ|
00000150  44 4e 73 6e 41 68 47 30  56 f1 4c 71 24 4c 47 68  |DNsnAhG0V.Lq$LGh|
00000160  51 47 49 70 79 6b 4f 47  53 5a 37 4f 51 70 68 5a  |QGIpykOGSZ7OQphZ|
00000170  44 4e 73 6e 41 68 47 30  78 35 28 09 18 4f 47 68  |DNsnAhG0x5(..OGh|
00000180  df df 48 70 79 7b 4f 47  53 fa 36 4f 51 60 68 5a  |..Hpy{OGS.6OQ`hZ|
00000190  44 4e 73 6e 41 68 47 30  56 41 4d 71 4c 4f 47 08  |DNsnAhG0VAMqLOG.|
000001a0  7f 35 2d 11 0d 0a 4f 47  13 47 37 4f 51 c0 69 5a  |.5-...OG.G7OQ.iZ|
000001b0  44 6e 73 6e 41 d8 46 30  56 41 4d 71 6c 4f 47 68  |DnsnA.F0VAMqlOGh|
000001c0  51 47 49 70 39 6b 4f 07  7d 3e 56 3b 30 70 68 5a  |QGIp9kO.}>V;0phZ|
000001d0  18 c9 72 6e 41 b8 46 30  56 d1 4d 71 6c 9f 46 68  |..rnA.F0V.Mql.Fh|
000001e0  51 47 49 70 79 6b 4f 47  53 5a 37 4f 11 70 68 9a  |QGIpykOGSZ7O.ph.|
000001f0  6a 3c 00 1c 22 68 47 30  56 5c 4d 71 6c 2f 44 68  |j<.."hG0V\Mql/Dh|
00000200  51 67 49 70 79 0b 4d 47  53 5a 37 4f 51 70 68 5a  |QgIpy.MGSZ7OQphZ|
00000210  44 4e 73 6e 01 68 47 70  56 41 4d 71 6c 4f 47 68  |DNsn.hGpVAMqlOGh|
00000220  51 47 49 70 79 6b 4f 47  53 5a 37 4f 51 70 68 5a  |QGIpykOGSZ7OQphZ|
00000230  44 4e 73 6e 41 68 47 30  56 41 4d 71 6c 4f 47 68  |DNsnAhG0VAMqlOGh|
00000240  51 47 49 70 79 6b 4f 47  53 5a 37 4f 51 70 68 5a  |QGIpykOGSZ7OQphZ|
00000250  44 4e 73 6e 41 68 47 30  56 41 4d 71 6c 4f 47 68  |DNsnAhG0VAMqlOGh|
00000260  51 47 49 70 79 6b 4f 47  53 5a 37 4f 51 70 68 5a  |QGIpykOGSZ7OQphZ|
00000270  44 4e 73 6e 41 68 47 30  56 41 4d 71 6c 4f 47 68  |DNsnAhG0VAMqlOGh|
00000280  51 47 49 70 79 6b 4f 47  53 5a 37 4f 51 70 68 5a  |QGIpykOGSZ7OQphZ|
00000290  44 4e 73 6e 41 68 47 30  56 41 4d 71 6c 4f 47 68  |DNsnAhG0VAMqlOGh|
000002a0  51 47 49 70 79 6b 4f 47  53 5a 37 4f 51 70 68 5a  |QGIpykOGSZ7OQphZ|
[...]

Note the pattern QGIpykOGSZ7OQphZDNsnAhG0VAMqlOGh that is reoccuring from offset 0x200 onward. An educated guess is that the file is obfuscated with XOR and at this place (offset 0x200 - 0x2a0) the obfuscated file contains null bytes, and therefore exposes the key used for the rolling xor obfuscation used.

Let’s verify this educated guess.

We take the downloaded file (md5: 716165fb5e07ecc95d45e8761b10ab30) and xor it with QGIpykOGSZ7OQphZDNsnAhG0VAMqlOGh. You can use my golang rolling xor implementation from gist like this.

After you built the above code you can use it as follows to undo the xor encryption.

xor -s QGIpykOGSZ7OQphZDNsnAhG0VAMqlOGh -f hjt67t -o hardiloch8.exe

Et voila, we get a MZ Header:

00000000  4d 5a 90 00 03 00 00 00  04 00 00 00 ff ff 00 00  |MZ..............|
00000010  b8 00 00 00 00 00 00 00  40 00 00 00 00 00 00 00  |........@.......|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 80 00 00 00  |................|
00000040  0e 1f ba 0e 00 b4 09 cd  21 b8 01 4c cd 21 54 68  |........!..L.!Th|
00000050  69 73 20 70 72 6f 67 72  61 6d 20 63 61 6e 6e 6f  |is program canno|
00000060  74 20 62 65 20 72 75 6e  20 69 6e 20 44 4f 53 20  |t be run in DOS |
00000070  6d 6f 64 65 2e 0d 0d 0a  24 00 00 00 00 00 00 00  |mode....$.......|
00000080  50 45 00 00 4c 01 04 00  e8 b2 19 59 00 00 00 00  |PE..L......Y....|
00000090  00 00 00 00 e0 00 0f 01  0b 01 06 00 00 a0 01 00  |................|
000000a0  00 d0 01 00 00 00 00 00  1c a6 01 00 00 10 00 00  |................|
000000b0  00 b0 01 00 00 00 40 00  00 10 00 00 00 10 00 00  |......@.........|
000000c0  04 00 00 00 00 00 00 00  04 00 00 00 00 00 00 00  |................|
000000d0  00 80 03 00 00 10 00 00  81 fd 02 00 02 00 00 00  |................|
000000e0  00 00 10 00 00 10 00 00  00 00 10 00 00 10 00 00  |................|
000000f0  00 00 00 00 10 00 00 00  00 00 00 00 00 00 00 00  |................|
00000100  7c ba 01 00 04 01 00 00  00 60 03 00 00 1d 00 00  ||........`......|
00000110  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000120  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000130  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000140  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000150  00 00 00 00 00 00 00 00  00 b0 01 00 48 03 00 00  |............H...|
00000160  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000170  00 00 00 00 00 00 00 00  2e 74 65 78 74 00 00 00  |.........text...|
00000180  8e 98 01 00 00 10 00 00  00 a0 01 00 00 10 00 00  |................|
00000190  00 00 00 00 00 00 00 00  00 00 00 00 20 00 00 60  |............ ..`|
000001a0  2e 72 64 61 74 61 00 00  40 1d 00 00 00 b0 01 00  |.rdata..@.......|
000001b0  00 20 00 00 00 b0 01 00  00 00 00 00 00 00 00 00  |. ..............|
000001c0  00 00 00 00 40 00 00 40  2e 64 61 74 61 00 00 00  |....@..@.data...|
000001d0  5c 87 01 00 00 d0 01 00  00 90 00 00 00 d0 01 00  |\...............|
000001e0  00 00 00 00 00 00 00 00  00 00 00 00 40 00 00 c0  |............@...|
000001f0  2e 72 73 72 63 00 00 00  00 1d 00 00 00 60 03 00  |.rsrc........`..|
00000200  00 20 00 00 00 60 02 00  00 00 00 00 00 00 00 00  |. ...`..........|
00000210  00 00 00 00 40 00 00 40  00 00 00 00 00 00 00 00  |....@..@........|
00000220  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000230  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000240  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000250  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000260  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000270  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000280  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000290  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000002a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
[...]

The file executable has the following checksums and VT coverage:

Checksums for hardiloch8.exe:
MD5      (hardiloch8.exe): f3d9b2cb51e81d12ff3d5faaca231041
SHA1     (hardiloch8.exe): ca7cf9e472f34973216781c3a1e269c510af0300
SHA256   (hardiloch8.exe): 5f1fcdfb951dc4642ce136a5d3e6bc42021f8e0cd631975a5eb3842da020531c
Blake2s  (hardiloch8.exe): 30f42a70db4750d571ff448fb575fb158add146441dbf89ba775e7404f726671
Blake2b2 (hardiloch8.exe): 9b38fd14ee22b12e5b97a4b1acc539a4309a0bd5adb462cc0562b637507c123f

hardiloch8.exe: PE32 executable (GUI) Intel 80386, for MS Windows

f3d9b2cb51e81d12ff3d5faaca231041 [11/60] IS KNOWN by VirusTotal
Engine 'SentinelOne' (Version 1.0.0.12) detects as 'static engine - malicious', since update 20170516
Engine 'Paloalto' (Version 1.0) detects as 'generic.ml', since update 20170517
Engine 'Symantec' (Version 1.3.1.0) detects as 'Trojan.Gen.8!cloud', since update 20170517
Engine 'Endgame' (Version 0.5.0) detects as 'malicious (high confidence)', since update 20170515
Engine 'ZoneAlarm' (Version 1.0) detects as 'UDS:DangerousObject.Multi.Generic', since update 20170517
Engine 'Bkav' (Version 1.3.0.8876) detects as 'W32.eHeur.Malware08', since update 20170517
Engine 'Kaspersky' (Version 15.0.1.13) detects as 'UDS:DangerousObject.Multi.Generic', since update 20170517
Engine 'Webroot' (Version 1.0.0.207) detects as 'W32.Ransomware.Jaff', since update 20170517
Engine 'CrowdStrike' (Version 1.0) detects as 'malicious_confidence_63% (W)', since update 20170130
Engine 'VBA32' (Version 3.12.26.4) detects as 'SScope.TrojanRansom.WannaCry', since update 20170517
Engine 'Invincea' (Version 6.3.0.25213) detects as 'worm.win32.gamarue.au', since update 20170516

But what is it. What does the file do. Well we can try it out and execute it in a safe environment.

The Ransomware guys hide behind http://rktazuzi7hbln7sy.onion/

Wehn you enter an ID, you get a bitcoin addr to pay the ransom to and some instructions.

The ransom is quite high, it is currently 814.34 USD

Investigate the sample with IDA

You can find the following PDB String in the binary. This is the Path where the developer of the malware used to store it’s code for this malware.

D:\\Arena\\Cryptor_AES-RSA_V13\\Release\\Encoder.pdb

More digging into it will be done in the next post (or not, depends on my time).

May 15, 2017 - 4 minute read - Kommentar Wanna Cry Ransomware Worm

Wanna Cry - Anmerkungen

Ich muss hier mal ein paar Anmerungen zur aktuellen Ransomware Welle durch Wanna Cry loswerden.

der Killswitch der keiner ist

Ich glaub ja nicht das der sog. Kill-Switch wirklich ein Killswitch ist. Ich glaube ja eher dass das eine Funktion ist die vom Urheber dafür gedacht war Analyseumgebungen zu detektieren. Wenn man die malware ohne Netzwerk aber mit einem Netzwerkemulator wie z.B. FakeNet startet dann führt diese Funktionalität dazu dass die Ransomware in einer solchen Analyseumgebung nicht aktiv wird.

Der Aufruf - um die sog. KillSwitch domain zu prüfen - nutzt explizit keine Proxies. Wenn man das bewusst als KillSwitch angelegt hätte, dann müsste dieser Aufruf natürlich möglicherweise vorhandene Proxies nutzen. Anders kommt man heutzutage nicht mehr aus internen Firmennetzen ins Internet.

unklarer Infection Vector

In den Medien lese ich in Zusammenhang mit Wanna Cry immer wieder man solle vorsichtig mit Emails von unbekannten und darin enthaltentn Links und Dateianhängen sein. Das ist natürlich richtig. Aber im Falle von Wanna Cry ist bisher völlig unklar wie der initiale Infection Vector aussieht. Ich habe bisher von niemanden gesicherte Information dass diese Malware wirklich per email kommt. Es könnte auch sein dass der Infection Vector ein ganz anderer ist.

die Schuldfrage

Meiner Meinung nach sind an der aktuellen Welle mehrere Beteiligte in unterschiedlichen Graden Mitschuld.

Microsoft

Microsoft hat die zugrunde liegende Lücke verbockt. Dafür trägt Microsoft die alleinige Schuld.

NSA

Die NSA hat die Lücke entdeckt, aber nicht an Microsoft gemeldet um uns alle sicherer zu machen. Stattdessen wurde die Lücke für eigene Zwecke genutzt um mehr oder weniger legitime Ziele anzugreifen. Selbst als die NSA wusste dass ihnen die Lücke und der dazugehörige Exploit geklaut wurde haben sie Microsoft nicht vorgewarnt. Erst im Zuge der Veröffentlichenung durch die Shadow-Brokers wurde Microsoft darauf hingewiesen und hat die Lücke dann auch schnellstmöglich geschlossen und ein Patch veröffentlicht.

Die NSA hat damit meiner Meinung nach leichtfertig die Sicherheit von uns allen geopfert um einen eigenen Vorteil zu haben. Je nachdem wie man zu Geheimdiensten und ihrer Arbeit steht kann man das für einen gewissen Zeitraum noch OK finden. Dass die NSA Microsoft aber nicht gewarnt hat selbst als ihnen klar sein musste dass u.a. diese Lücke anderen in die Hände gefallen war ist meiner Meinung nach nicht zu rechtfertigen.

Nutzer

Die Nutzer die nun Betroffen sind hätten es in der Hand gehabt. Nutzer die ihre Systeme brav gepatcht haben waren nicht betroffen, Nutzer die das nicht getan haben sind nicht unwesentlich mitschuld. Derlei Lücken patcht man sofort und mach da nicht lange rum. Wer nicht auf die Reihe kriegt seine Systeme zu patchen ist Teil des Problems und nicht Teil der Lösung.

Update | Do 1 Jun 2017 20:20:15 CEST

Ich habe heute mit einem Leitenden Mitarbeiter des BSI über WannaCry gesprochen. Der BSI Mann vertrat die Auffassung dass WannaCry:

  • ein Test dafür war was man mit einer solchen Malware erreichen kann.
  • dass es den Autoren nie um Geld gegangen ist
  • und dass die Autoren keine Amateure waren, sondern ausgebuffte Profis.

Was man mit einem Wurmable Exploit so alles anstellen kann wissen wir spätestens seit SqlSlammer, das muss man nicht unbedingt nochmal versuchen. Wenn es den Autoren nie um Geld ging, warum sollten sie dann diese Ransom Nummer abziehen? Das ist doch nur Arbeit die RansomNote in zig Sprachen übersetzten,… Wenn es einem nicht um Geld geht und man “nur” was austesten will, dann kann man sich den ganzen Klamauk sparen und einfach testen. Ohne diese RansomNummer hätten doch die meisten Opfer bis heute nicht gemerkt dass sie gep0wned wurden. Auf der anderen Seite fallen mir keinerlei Vorteil ein warum man trozdem so eine Ransom Nummer abziehen wil wenn man nicht an Geld interessiert ist.

Und zu der Meinung dass das augebuffte Profis waren sprechen meiner Meinung nach eine ganze Reihe von Tatsachen.

  • Profis haben das mit dem Threading verstanden und würden nicht so ein gemurxe machen.
  • Profis hätten verstanden wie man die NSA Lücke auch unter Windows XP nutzen kann und das nicht dermaßen versaubeutelt.
  • Profis hätten das mit der generierung von individuellen BitcoinAdressen hinbekommen und das nicht so versaubeutelt.
  • Profis denen es nicht um Geld geht hätten diese RansomNummer einfach sein lassen und still und heimlich die halbe Welt geowned - ähm ich meine ihre Tests vollzogen.
  • Profis hätten den sog. Killswitch - egal ob als killswitch oder als analyse detection - anders gebaut.
  • Profis hätten vermutlich auch EternalBlue und DoublePulsar anders eingebaut und nicht so stümperhaft da rein gefrickelt.

Mich hat das nicht überzeugt, ich bleibe bis auf weiteres bei meiner Meinung dass es Amateure waren die ursprünglich Geld machen wollten, dann aber gemerkt haben was sie angerichtet haben und kalte Füße bekamen und diese seitdem ganz ganz ruhig halten und hoffen dass sie nicht erwischt werden.

Desshalb denke ich auch dass diese ca. 100.000 Euro in Bitcoins auf den 3 fallback Konten niemals - oder zumindest nicht sobald - transferiert werden.