diff --git a/vmdk/Dockerfile b/vmdk/Dockerfile new file mode 100644 index 00000000..6f63a0e8 --- /dev/null +++ b/vmdk/Dockerfile @@ -0,0 +1,13 @@ +FROM ubuntu:22.04 + +RUN apt-get update + +RUN mkdir -p /testdata + +# Set working directory +WORKDIR /testdata + +# Copy valid .vmdk file into the container +COPY valid-ext-exfat-fat32-ntfs.vmdk /testdata/valid-ext-exfat-fat32-ntfs.vmdk + +CMD ["/bin/bash"] diff --git a/vmdk/README.md b/vmdk/README.md new file mode 100644 index 00000000..b1cc936d --- /dev/null +++ b/vmdk/README.md @@ -0,0 +1,26 @@ +# OSV-Scalibr: VMDK Extractor + +This directory contains a test Dockerfile for validating OSV-Scalibr's VMDK Extractor plugin. A VMDK (Virtual Machine Disk) file is a disk image format commonly used by virtual machines to emulate a physical hard drive. + +## Setup + +### Build the Docker Image + +```bash +cd security-testbeds/vmdk +docker build -t vmdk-extractor-testbed . +``` + +### Run the Container + +```bash +docker run -it --rm vmdk-extractor-testbed /bin/bash +``` + +### Running OSV-Scalibr + +Build or copy the `scalibr` binary to the current directory, and inside the container, run `scalibr` with the vmdk extractor: + +```bash +./scalibr --extractors=embeddedfs/vmdk --result=output.textproto valid-ext-exfat-fat32-ntfs.vmdk +``` diff --git a/vmdk/genvmdk.sh b/vmdk/genvmdk.sh new file mode 100755 index 00000000..3a424f47 --- /dev/null +++ b/vmdk/genvmdk.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +dd if=/dev/zero of=valid.img bs=1M count=256 +parted -s --align optimal valid.img --script mklabel gpt +parted -s --align optimal valid.img --script mkpart primary ext4 0% 25% +parted -s --align optimal valid.img --script mkpart primary ntfs 25% 50% +parted -s --align optimal valid.img --script set 2 msftdata on +parted -s --align optimal valid.img --script mkpart primary ntfs 50% 75% +parted -s --align optimal valid.img --script set 3 msftdata on +parted -s --align optimal valid.img --script mkpart primary ntfs 75% 100% +parted -s --align optimal valid.img --script set 3 msftdata on +sudo losetup -fP valid.img +LOOPDEV=$(losetup -j valid.img | cut -d: -f1) +PARTITION1="${LOOPDEV}p1" +PARTITION2="${LOOPDEV}p2" +PARTITION3="${LOOPDEV}p3" +PARTITION4="${LOOPDEV}p4" +sudo mkfs.ext4 $PARTITION1 +sudo mkfs.exfat $PARTITION2 +sudo mkfs.vfat -F 32 $PARTITION3 +sudo mkfs.ntfs $PARTITION4 +sudo rm -rf /mnt/valid* +sudo mkdir /mnt/valid1 +sudo mkdir /mnt/valid2 +sudo mkdir /mnt/valid3 +sudo mkdir /mnt/valid4 +sudo mount ${PARTITION1} /mnt/valid1 +sudo mount ${PARTITION2} /mnt/valid2 +sudo mount ${PARTITION3} /mnt/valid3 +sudo mount ${PARTITION4} /mnt/valid4 +openssl genrsa -out private-key.pem 4096 +sudo cp private-key.pem /mnt/valid1/private-key1.pem +sudo cp private-key.pem /mnt/valid2/private-key2.pem +sudo cp private-key.pem /mnt/valid3/private-key3.pem +sudo cp private-key.pem /mnt/valid4/private-key4.pem +sudo umount /mnt/valid1 +sudo umount /mnt/valid2 +sudo umount /mnt/valid3 +sudo umount /mnt/valid4 +sudo losetup -d ${LOOPDEV} +sudo rm -rf /mnt/valid* +qemu-img convert valid.img -O vmdk valid-ext-exfat-fat32-ntfs.vmdk +rm private-key.pem diff --git a/vmdk/valid-ext-exfat-fat32-ntfs.vmdk b/vmdk/valid-ext-exfat-fat32-ntfs.vmdk new file mode 100644 index 00000000..f3a91f03 Binary files /dev/null and b/vmdk/valid-ext-exfat-fat32-ntfs.vmdk differ