Private File Search

Summary

Mentor(s): Prof. Bill Griffin-Dubson
Dr. Mike Murphy
Project Type: Software development; user interface design
Technologies: Python, Qt (PySide6, Qt Designer), Git
Undergraduate Credit: CSCI 399, CSCI 490
Graduate Credit: IST 659
Locality: Main campus and/or remote

Purpose

Modern file managers often provide some sort of search feature to make it easier for people to find files on their systems. For performance reasons, these search systems normally use some kind of index, which is a database that is built in the background to associate search terms with files. In the simplest cases, such a database might contain a list of file names. However, most databases also index file contents to make searching more powerful.

The convenience of a pre-built search database comes with costs in terms of privacy, security, and forensic discoverability. For example, if a user keeps a file containing sensitive data on his or her system, a threat actor who gains access to the search database alone might be able to get some sensitive information from the stored keyword associations. A threat actor with access to the entire system could use the search database as a quick way to identify files to steal or ransom. Someone using forensic tools could analyze the database to infer that a system once contained information that has subsequently been deleted, since deleting a file doesn't necessarily rebuild the database.

Solving these privacy, security, and discoverability issues with a simple search implementation requires making an intentional performance trade-off. Instead of maintaining a search database, a recursive search of the file system can be performed on demand. While this operation will not be as fast as an index-backed search, it will avoid creating an extra high-value artifact on the system.

Scope of Work

Use Qt Designer to create a file search dialog that is capable of searching on file names and file contents at the user's discretion. Implement the search as an on-demand recursive search without maintaining a search database, either using pure Python code or by automating external programs (such as find and grep) to handle search operations. Integrate the search dialog into TealFiler. Incrementally add extra search filters, such as the ability to search file modification dates, permissions, and other metadata.