Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions vdi/Dockerfile
Original file line number Diff line number Diff line change
@@ -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"]
27 changes: 27 additions & 0 deletions vdi/README.md
Original file line number Diff line number Diff line change
@@ -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
```
45 changes: 45 additions & 0 deletions vdi/gentestdata.sh
Original file line number Diff line number Diff line change
@@ -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
Binary file added vdi/valid-ext-exfat-fat32-ntfs-dynamic.vdi
Binary file not shown.
Binary file added vdi/valid-ext-exfat-fat32-ntfs-fixed.vdi
Binary file not shown.