diff --git a/vdi/Dockerfile b/vdi/Dockerfile new file mode 100644 index 00000000..0d1f1496 --- /dev/null +++ b/vdi/Dockerfile @@ -0,0 +1,14 @@ +FROM ubuntu:22.04 + +RUN apt-get update + +RUN mkdir -p /testdata + +# Set working directory +WORKDIR /testdata + +# Copy valid .vdi file into the container +COPY valid-ext-exfat-fat32-ntfs-static.vdi /testdata/valid-ext-exfat-fat32-ntfs-static.vdi +COPY valid-ext-exfat-fat32-ntfs-dynamic.vdi /testdata/valid-ext-exfat-fat32-ntfs-dynamic.vdi + +CMD ["/bin/bash"] diff --git a/vdi/README.md b/vdi/README.md new file mode 100644 index 00000000..88339eee --- /dev/null +++ b/vdi/README.md @@ -0,0 +1,27 @@ +# OSV-Scalibr: VDI Extractor + +This directory contains a test Dockerfile for validating OSV-Scalibr's VDI Extractor plugin. A VDI 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/vdi +docker build -t vdi-extractor-testbed . +``` + +### Run the Container + +```bash +docker run -it --rm vdi-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 vdi extractor: + +```bash +./scalibr --extractors=embeddedfs/vdi --result=output.textproto valid-ext-exfat-fat32-ntfs-static.vdi +./scalibr --extractors=embeddedfs/vdi --result=output.textproto valid-ext-exfat-fat32-ntfs-dynamic.vdi +``` diff --git a/vdi/gentestdata.sh b/vdi/gentestdata.sh new file mode 100644 index 00000000..765076a3 --- /dev/null +++ b/vdi/gentestdata.sh @@ -0,0 +1,45 @@ +#!/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* +VBoxManage convertfromraw --format=VDI valid.img valid-ext-exfat-fat32-ntfs-dynamic.vdi +VBoxManage convertfromraw --format=VDI --variant=Fixed valid.img valid-ext-exfat-fat32-ntfs-static.vdi + +rm private-key.pem diff --git a/vdi/valid-ext-exfat-fat32-ntfs-dynamic.vdi b/vdi/valid-ext-exfat-fat32-ntfs-dynamic.vdi new file mode 100644 index 00000000..dc276de9 Binary files /dev/null and b/vdi/valid-ext-exfat-fat32-ntfs-dynamic.vdi differ diff --git a/vdi/valid-ext-exfat-fat32-ntfs-fixed.vdi b/vdi/valid-ext-exfat-fat32-ntfs-fixed.vdi new file mode 100644 index 00000000..d4c8e66a Binary files /dev/null and b/vdi/valid-ext-exfat-fat32-ntfs-fixed.vdi differ