Skip to content
tom-g1 edited this page Aug 14, 2019 · 24 revisions

Welcome to the Wiki for fishy: A framework for filesystem based data hiding techniques!

This page will give you an introduction to fishy.

If you are looking for a more in-depth presentation on the architecture of the system, look here.

To get a more detailed look at the currently implemented Hiding Techniques, visit this site.

This Wiki is based on the documentation found within the repository and the paper "Adrian V. Kailus, Christian Hecht, Thomas Göbel und Lorenz Liebler, „fishy – Ein Framework zur Umsetzung von Verstecktechniken in Dateisystemen“, in D-A-CH Security, Gelsenkirchen (Germany), September 2018.".

Table of contents

  1. What is fishy?
  2. Requirements
  3. Installation
  4. Filesystems and Hiding Techniques

What is fishy?

fishy is an anti-forensics toolkit for filesystem based hiding techniques. These hiding techniques usually exploit existing structures on the filesystem layer to hide data from conventional access methods. fishy is intended to introduce people to the concept of established anti-forensics methods associated with data hiding.

Furthermore, this framework is supposed to be easy to use and easy to expand with a consistent interface and extensive documentation. Due to its modular structure, adding compatibility with more filesystems or new hiding techniques can be easily done. For a more detailed introduction to fishy's architecture, visit this Wiki page dedicated to the architecture.

fishy was initiated by the da/sec research group and developed in cooperation with several bachelor students of the Hochschule Darmstadt (h_da), University of Applied Sciences.

Student members: Adrian Kailus, Christian Hecht, Matthias Greune, Deniz Celik, Tim Christen, Dustin Kern, Yannick Mau, Patrick Naili and Jan Türr.

da/sec members: Thomas Göbel, Sebastian Gärtner and Lorenz Liebler.

Limitations

fishy is currently only tested to run under Linux. Other operating systems may provide different functions to access low level devices.

Currently, fishy can hide multiple files on a filesystem, but is not capable of managing them. Therefore the user has to avoid overwriting data.

There is currently no automatic encryption when hiding data. If the data is supposed to be encrypted, it has to be done manually and prior to using the hiding technique.

References

  • [1] Adrian V. Kailus, Christian Hecht, Thomas Göbel und Lorenz Liebler, „fishy – Ein Framework zur Umsetzung von Verstecktechniken in Dateisystemen“, in D-A-CH Security, Gelsenkirchen (Germany), September 2018.

  • [2] Thomas Göbel and Harald Baier, „fishy – A Framework for Implementing Filesystem-based Data Hiding Techniques“, in Proceedings of the 10th EAI International Conference on Digital Forensics & Cyber Crime (ICDF2C), New Orleans (United States), September 2018.

  • [3] Thomas Göbel, Jan Türr and Harald Baier, „Revisiting Data Hiding Techniques for Apple File System“, in Proceedings of the 12th International Workshop on Digital Forensics (WSDF) to be held in conjunction with the 14th International Conference on Availability (ARES), Reliability and Security, Canterbury (UK), August 2019.

Attribution

Any publications using the code must cite and reference the conference paper [1] and [2].

Requirements

Building fishy

To build the framework you will need

  1. Python 3.5 or higher
  2. argparse - parsing arguments from the command line
  3. construct - parsing FAT filesystem - as of right now, use a construct version < 2.9 (2.8.2 was tested and is working)
  4. pytsk3 - parsing NTFS filesystem
  5. simple-crypt - encryption of meta-data
  6. numpy - Calculating APFS checksums

Testing

For testing purposes you will need to also install

  1. pytest - unit testing framework
  2. mount & dd unix tools - needed to generate test images

Documentation

In case you are interested in reading the full documentation on which this Wiki is based you will also need

  1. sphinx and spinx-argparse - to generate the document in a suitable format
  2. graphviz - to generate the graphs that are used in the documentation

Installation

Testing and Installing the program

  • If you want to run unit tests before installing:
sudo python setup.py test 
  • Installing the program:
sudo python setup.py install 
  • Generating the documentation:
pip install sphinx sphinx-argparse
python setup.py doc
  • Generate documentation as pdf:
cd doc
make latexpdf 
  • The following TeX-dependencies are needed:
sudo apt-get install latexmk
sudo apt-get install texlive-formats-extra

Filesystems and Hiding Techniques

As of February 2019 fishy supports four filesystems: FAT, NTFS, ext4 and APFS. Each one has a set of hiding techniques that are already implemented.

In the following tables, "✓" means the respective hiding technique has already been implemented, "✗" means the hiding techniques have been researched and are considered in progress, and "-" means that the hiding technique is not compatible with the corresponding filesystem.

Implemented Hiding Techniques

Command FAT NTFS EXT4 APFS Description
fileslack Uses file slack to hide data
mftslack - - - Uses MFT Entry Slack
addcluster Allocate additional cluster to data
badcluster - Bad Cluster allocation
reserved_gdt_blocks - - - Exploit reserved GDT block
superblock_slack - - Exploit Superblock slack
osd2 - - - Use of osd2 Bytes in Inodes
obso_faddr - - - Use of Inode field obso_faddr
nanoseconds - Use of Nanosecond Timestamp part
inode_padding - - - Use of Padding in Inodes
write_gen_counter - - - Use of write counter in Inodes
ext_field_padding - - - Use of dynamically created Extended Fields

Researched Hiding Techniques

In addition to the ones already implemented, multiple other hiding techniques have been researched and are planned to be implemented, i.e., the development is currently in progress.

Command FAT NTFS EXT4 APFS Description
ads - - - Use of Alternate Data Streams
superblock_reserved - - - Use of reserved space in Superblocks
superblock_backups - - - Exploitation of Superblock Backups
bootsector - Exploitation of Partition Bootsector
null_dir_entries - - - Exploitation of Directory Entries
gdt_slack - - - Exploitation of GDT Slack Space
groupdescr_reserved - - - Use of reserved space in Group Descriptor
gdt_backups - - - Exploitation of GDT Backup Copies
blockbitmap_slack - - - Exploitation of Block Bitmap Slack
inodebitmap_slack - - - Exploitation of Inode Bitmap Slack
inode_slack - - - Exploitation of Inode Record Slack
inode_reserved - - - Use of reserved space in Inode Struct
uninit_datastructure - - - Exploitation of Data Structures in Uninitialized Block Groups
vol_list - - - Exploitation of list of Volume Superblock IDs found in Container Superblocks
superblock_test - - - Use of fields in debugging/testing fields found in Container Superblocks
unmount_logs - - - Use of Modification logs in Volume Superblocks

Additionally, there are two more commands related to the hiding techniques:

  • fattools: Provides information about a FAT system
  • metadata: Provides information about data stored in a metadata file

For further information on the hiding techniques, visit the dedicated section.