<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta>
      <journal-title-group>
        <journal-title>Ph.D. Workshop, August</journal-title>
      </journal-title-group>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>Auditing DBMSes through Forensic Analysis</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Row Delimiter</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>James Wagner Supervised by Dr. Alexander Rasin School of Computing, DePaul University Chicago</institution>
          ,
          <addr-line>IL</addr-line>
          <country country="US">USA</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2018</year>
      </pub-date>
      <volume>27</volume>
      <issue>2018</issue>
      <abstract>
        <p>The pervasive use of databases for the storage of critical and sensitive information in many organizations has led to an increase in the rate at which databases are exploited in computer crimes. While there are several techniques and tools available for database forensics, they usually assume apriori database preparation, such as relying on tamper-detection software to already be in place or use of detailed logging. However, investigators need forensic tools and techniques that work on poorly-con gured databases and make no assumptions about the extent of damage in a database. In this paper, we present our database forensics methods, which are capable of examining database content from a storage image (disk or RAM) without using logs or any system metadata. We describe how these methods can be used to detect security breaches in a compromised environment where the security threat arose from a privileged user (or someone who has obtained such privileges).</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. INTRODUCTION</title>
      <p>Cyber-crime (e.g., data ex ltration or computer fraud) is
a signi cant concern in today's society. A well-known fact
from security research and practice is that unbreakable
security measures are virtually impossible to create. For
example, 1) incomplete access control restrictions allows users to
execute commands beyond their intended roles, and 2) users
may illegally obtain privileges by exploiting security holes
in a Database Management System (DBMS) or OS code
or through other means (e.g., social engineering). Thus,
in addition to deploying preventive measures (e.g., access
control), it is necessary to 1) detect security breaches in a
timely fashion, and 2) collect evidence about attacks to
devise counter-measures and assess the extent of the damage
(e.g., what data was leaked or perturbed). This evidence can
provide preparation for legal action or valuable information
to prevent future attacks.</p>
      <p>
        DBMSes are targeted by criminals because they serve as
repositories of data. Therefore, investigators must have the
capacity to examine and forensically interpret contents of a
DBMS. Currently, an audit log with SQL query history is
a critical (and perhaps only) source of evidence for
investigators [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] when a malicious operation is suspected. In eld
conditions, a DBMS may not provide the necessary logging
granularity (unavailable or disabled). Moreover, the storage
itself might be corrupt or contain multiple DBMSes.
      </p>
      <p>
        Digital forensics provides tools for independent analysis
with minimal assumptions about the environment. A
particularly important and well-recognized technique is le
carving [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], which extracts les (but not DBMS les) from a disk
image, including deleted or corrupted les. Traditional le
carving techniques interpret les (e.g., JPEG, PDF)
individually and rely on le headers. DBMS les, on the other
hand, do not maintain a le header and are never
independent (e.g., table contents are stored separately from table
name and logical structure information). Even if DBMS
les could be carved, they cannot be meaningfully imported
into a di erent DBMS and must be parsed to retrieve their
content. To accomplish that task, DBMSes need their own
set of digital forensics rules and tools.
      </p>
      <p>
        Even in an environment with ideal log settings, a DBMS
cannot necessarily guarantee log accuracy or immunity from
tampering. For example, log tampering is a concern when a
breach originated from a privileged user such as an
administrator (DBA or an attacker who obtained DBA privileges).
Tamper-proof logging mechanisms were proposed in related
work [
        <xref ref-type="bibr" rid="ref10 ref7">7, 10</xref>
        ], but these only prevent logs from modi cations
and do not account for attacks that skirt logging (e.g.,
logging was disabled). Knowing that even privileged users have
almost no control of how lowest level storage behaves, an
analysis of forensic artifacts provides a unique approach to
identify tampering in an untrusted environment.
      </p>
      <p>The goal of this work is to 1) develop DBMS forensic
methods, and 2) use these methods to detect and describe
security breaches in compromised environments. Table 1
summarizes the remainder of this paper; future work is bolded.</p>
    </sec>
    <sec id="sec-2">
      <title>DATABASE FORENSICS</title>
      <p>Unlike traditional les (e.g., PDF), DBMS les do not
contain headers that allow for le identi cation. At the
same time, all row-store DBMSes use xed-size pages to
store user data, auxiliary data (e.g., indexes and
materialized views), and the system catalog. DBMS data is accessed
and cached in page units. Pages maintain a consistent
structure, whereas individual record structure varies throughout
DBMS storage, which is why we approach database forensics
at the page level. In this section, we describe page carving
including our implementation (DBCarver), future work
support application development from DBCarver output, and
anti-forensics techniques that can sanitize and hide data in
DBMS storage.
2.1</p>
    </sec>
    <sec id="sec-3">
      <title>Page Carving</title>
      <p>
        Database page carving is a method we previously
introduced for the reconstruction of relational DBMSes without
relying on le system or the DBMS. Page carving is similar
to traditional le carving [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] in that data, including deleted
data, can be reconstructed from images or RAM snapshots
without the use of a live system. Forensic tools, such as
Sleuth Kit [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] and EnCASE Forensic [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], are commonly used
by investigators to reconstruct le system data but are
incapable of parsing DBMS les. None of the third party
recovery tools (e.g., [
        <xref ref-type="bibr" rid="ref6 ref8">6, 8</xref>
        ]) are helpful for independent audit
purposes because (at best) they only recover \active" data from
current tables. A database forensic tool (just like a forensic
le system tool) should also reconstruct unallocated pieces
of data including deleted rows, auxiliary structures (indexes,
MVs), or bu er cache space.
      </p>
      <p>
        While each DBMS uses its own page layout, a great deal of
overlap between page layouts allowed us to generalize
storage for most row-store DBMSes. In [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] we presented a
comparative page structure study for IBM DB2, Oracle, MS
SQL Server, PostgreSQL, MySQL, SQLite, Firebird, and
Apache Derby. In this work, we also described a parameter
set to de ne page layout for the purpose of reconstruction.
      </p>
      <p>
        Deleted Data. When data is deleted, the DBMS initially
marks it as deleted, rather than explicitly overwriting it.
This data becomes unallocated (free listed) storage { in [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]
we described the expected lifetime of forensic evidence within
database storage following deletion and defragmentation.
We described three categories of deleted data: records, pages,
and values. A record is the minimum deletion unit and can
be attributed to a DELETE, an old version of an UPDATE, or
an aborted transaction. A deleted record is identi ed by
its delete marking during page reconstruction. Dropped or
rebuilt objects create deleted pages, which are identi ed by
carving system catalog tables. Values from deleted records
are found in auxiliary objects { e.g., indexes; they are
identi ed by mapping pointers back to records (only records
but not index values are deleted). We presented generalized
pointer deconstruction and pointer-record mapping in [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ].
      </p>
      <p>Figure 1 visualizes an example of deleted records for
several DBMSes. In all three pages, Row2-(Customer2, Jane) is
deleted while Row1-(Customer1, Joe) and Row2-(Customer3,
Jim) are active. Page#1 shows a case when the row
delimiter is marked, such as in MySQL or Oracle. Page#2
shows when the raw data delimiter is marked in PostgreSQL.
Page#3 shows when the row identi er is marked in SQLite.
Figure 1 omits DB2 and SQL Server example because they
only alter the row directory on deletion.
1
oCustomer1
w
R Joe</p>
      <p>60
2
oCustomer2
w</p>
      <sec id="sec-3-1">
        <title>R Jane</title>
        <p>44
3
oCustomer3
w
R Jim
2, 9, 24</p>
        <sec id="sec-3-1-1">
          <title>Raw Data Customer1 Identifier</title>
          <p>Delimiter Joe
Row</p>
        </sec>
      </sec>
      <sec id="sec-3-2">
        <title>Delete</title>
      </sec>
      <sec id="sec-3-3">
        <title>Row Meta</title>
      </sec>
      <sec id="sec-3-4">
        <title>Data</title>
        <p>2, 14, 24</p>
      </sec>
      <sec id="sec-3-5">
        <title>Customer2</title>
      </sec>
      <sec id="sec-3-6">
        <title>Jane</title>
        <p>2, 9, 24</p>
      </sec>
      <sec id="sec-3-7">
        <title>Customer3 Jim</title>
      </sec>
      <sec id="sec-3-8">
        <title>Delete</title>
        <p>0, 0, 0, 1</p>
      </sec>
      <sec id="sec-3-9">
        <title>Customer1</title>
        <p>Joe
0, 226, 0, 57</p>
      </sec>
      <sec id="sec-3-10">
        <title>Customer2</title>
      </sec>
      <sec id="sec-3-11">
        <title>Jane</title>
        <p>0, 0, 0, 3</p>
      </sec>
      <sec id="sec-3-12">
        <title>Customer3 Jim 1 2 3</title>
        <p>Figure 1: Deleted row examples: 1-MySQL/Oracle,
2-PostgreSQL and 3-SQLite</p>
        <p>Column-Store and NoSQL DBMSes. Currently, our page
carving only supports row-store DBMSes. Column-store
and NoSQL DBMSes do not use the same pages structure as
row-store DBMSes. Future work will expand our database
forensic methods to column-store and NoSQL DBMSes.
2.2</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>DBCarver</title>
      <p>
        We previously presented our implementation of page
carving called DBCarver [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]. Figure 2 provides an overview of
DBCarver architecture, which consists of two main
components: the parameter collector (A) and the carver (F).
A Parameter Iteratively load synthetic data B
DBMS D
Detector
      </p>
      <sec id="sec-4-1">
        <title>Generate DB config. file</title>
        <p>E</p>
      </sec>
      <sec id="sec-4-2">
        <title>DB config. files</title>
        <p>Capture DB storage C
Disk Images G</p>
      </sec>
      <sec id="sec-4-3">
        <title>RAM Images</title>
        <p>F</p>
        <p>DBCarver</p>
        <p>H Reconstructed Storage
● Data pages (e.g.,</p>
        <p>table, index)
● Deleted data
● Catalogs, logs</p>
        <p>
          The parameter detector loads synthetic data into a DBMS
(B), captures storage (C), nds pages in storage, and
captures page layout parameters in a con guration le (E) {
a text le describing page-level layout for that particular
DBMS. Parameters include those described in [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ], and have
since been expanded to support other metadata. DBCarver
automatically generates parameters values for new
DBMSes, or new DBMS versions. While most DBMSes retain
the same page layout across versions, we observed di erent
parameter values between PostgreSQL versions 7.3 and 8.4.
        </p>
        <p>The carver (F) uses the con guration les to reconstruct
any database content from disk images, RAM snapshots, or
any other input le (G). The carver returns storage artifacts
(H), such as user records, metadata describing user data,
deleted data, and system catalogs.
output. Furthermore, analyzing DBCarver output often
requires an in-depth understanding of DBMS storage
internals, which is unreasonable to expect from most users.</p>
        <p>To introduce composability for application development
with database forensic output, we propose a framework that
has two goals: 1) de nes a standard set of elds that describe
forensically extracted user data, system catalogs, auxiliary
objects, and other metadata, and 2) an user-friendly Python
library that interprets this set of elds. This module will
remove the need for specialized knowledge of database storage
in development of applications based on DBCarver output.</p>
        <p>
          We propose building a uni ed and standard output that
automates the initial forensic analysis. To do this, we will
store metadata from the DBCarver output in a series of
JSON objects that maintain a consistent structure for all
row-store relational DBMSes, while the original DBMS
snapshot returned by DBCarver will be loaded back into our
internal DBMS. The JSON objects will contain categories based
on the work of Gar nkel et al. [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ], and designed to include
all available information from DBCarver output.
        </p>
        <p>Working with the forensic output may require users to
have an in-depth understanding of DBMS storage, which is
unreasonable because each DBMS uses a highly customized
storage engine. Such a requirement may prevent users in
other domains from developing applications. We propose
building a Python module to ease the interaction with the
JSON objects and the reconstructed data stored in a DBMS.
This module will contain methods to access individual
properties from the JSON les. Furthermore, this module will
allow for connections to be made between the metadata stored
in the JSON les and the database snapshot stored in a
relational DBMS.
2.4</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Anti-Forensics</title>
      <p>
        Anti-forensics (AF) is the eld of interfering with forensic
techniques [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. We note that digital forensic tools can be
used by either investigators or criminals, to both protect
data and to interfere with a criminal investigation. In this
section, we discuss future work that uses AF to protect data.
      </p>
      <p>
        Two of the most representative AF techniques we consider
are data wiping and steganography. A corporation can use
data wiping to erase the already-deleted customer
information to prevent data theft. Steganography is a data hiding
technique { e.g., a means to discretely blow a whistle on
company's wrongdoing. Most prior work in database AF has
been highly DBMS-speci c; e.g., Stahlberg erased deleted
MySQL data by modifying the purge thread in source code [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ].
We propose a more generalized sanitization method for all
(including closed-source) DBMSes. We distinguish four
categories of deleted DBMS data to wipe in order to prevent
unintended data exposure: records, auxiliary data (e.g.,
indexes), system catalog, and unallocated pages. To e
ectively erase this data, the data itself must be overwritten
and page metadata (e.g., checksums and pointers) must be
updated accordingly. We further propose a steganography
strategy that additively alters the database state through
database le modi cation. This approach bypasses all
constraints and logging mechanisms since the operation is
performed without the DBMS. For example, domain constraints
can be violated, NULL can be added to a primary key column,
and foreign key constraints can be violated { making it
unlikely that the hidden row is found through regular queries.
3.
      </p>
    </sec>
    <sec id="sec-6">
      <title>DATABASE SECURITY</title>
      <p>Privileged users (e.g., DBA), by de nition, have the
ability to control and modify access permissions. Therefore,
audit logs alone are fundamentally unsuitable for the
detection of malicious, privileged users. DBMSes do not provide
many tools to defend against insider threats. Interestingly,
DBAs have little to no control over how data is stored at
the lowest level. Thus, malicious activity will still create
inconsistencies within storage artifacts. In this section, we
consider attack vectors that are detectable using database
forensics methods from Section 2. All of these solutions
assume that some level of logging was enabled and is available.
3.1</p>
    </sec>
    <sec id="sec-7">
      <title>DBDetective</title>
      <p>
        Audit logs are a critical piece of evidence for
investigators { and existing research has explored tamper-proof logs.
However, DBAs can disable logging for legitimate operations
(e.g., bulk loads). Therefore, we consider an attack where
logging was disabled, malicious activity was performed, and
logging was re-enabled. We proposed DBDetective in our
previous work [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] to detect activity missing from the logs.
      </p>
      <p>To detect unlogged activity, DBDetective compares the
disk images and/or RAM snapshots output from DBCarver
against the audit logs. We classify two categories of hidden
activity: record modi cations and read-only queries (i.e.,
SQL SELECT). When a record is inserted or modi ed the
record itself changes, page metadata may be updated (e.g.,
a delete mark is set) and index page(s) are likely to change.
We ag any artifacts that cannot be explained by a log entry
as suspicious, as shown in Figure 3.</p>
      <p>Log File
T1, DELETE FROM Customer
WHERE City = ‘Chicago’;
T2, DELETE FROM Customer
WHERE Name LIKE ‘Chris%’;</p>
      <p>UNATTRIBUTED
DELETE</p>
      <p>DICE Output
Del. Page Type: Table
Flag Structure: Customer
</p>
      <p>1, Christine, Chicago




2, George, New York
3, Christopher, Seattle
4, Thomas, Austin
5, Mary, Boston</p>
    </sec>
    <sec id="sec-8">
      <title>DBStorageAuditor</title>
      <p>
        Privileged OS users commonly have access to database
les. Consider a SysAdmin who, acting as the root,
maliciously edits a DBMS le in a Hex editor or through Python.
The DBMS is unaware of external le write activity taking
place outside its own programmatic access and thus cannot
log it. Such an attack is a `black-hat' application of
antiforensics discussed in Section 2.4. In our previous work [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ],
we proposed DBStorageAuditor to detect database le
tampering.
      </p>
      <p>
        To detect database le tampering, DBStorageAuditor [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]
uses indexes to verify the integrity of table data. We rst
verify the integrity of the indexes by checking for
tamperingbased inconsistencies within the B-Tree structure. Once the
index integrity is veri ed, we deconstruct the index
pointers and match them to table records using the table page
metadata; we generalized the deconstruction of index
pointers for all major DBMSes. We organize the index pointers
based on physical location to keep our matching approach
scalable. Finally, any extraneous data or erased data found
through index and table comparison is agged as suspicious.
3.3
      </p>
    </sec>
    <sec id="sec-9">
      <title>Event Timeline Analysis</title>
      <p>Privileged users with access to the DBMS server have
the capability to change server information, speci cally the
global clock. This quietly a ects the veracity of DBMS
audit logs. Consider a system administrator who changes the
server global clock to an earlier date, performs malicious
activity, and resets the global clock. Such an attack
backdates activity without altering the log les, and disguises
when the actual execution time of the malicious activity.
As future work, we will detect such attempts to backdate
log entries.</p>
      <p>In such an environment, any global or logical clock can not
be assumed to be reliable. Therefore, to create a timeline of
events, we believe it is necessary to use storage metadata,
which even a privileged user cannot modify. The internal
RowID pseudo-column is of particular interest to construct a
timeline. RowID is used by indexes and re ects the physical
location of a record including its PageID. Whenever a page
is modi ed, we can store the PageID to know when data was
modi ed. Thus, the order of the PageIDs must be consistent
with the order of the log events. We will propose
tamperproof techniques to store the PageID.
3.4</p>
      <p>Quantitative Analysis and Reproducibility
As future work, we will determine the detection accuracy
for each attack described in this section. For each detection
type, we will compute a con dence rating based on a variety
of environment variables (e.g., bu er cache size, volume of
operations, and DBMS storage engine). For example, given
a low volume of DELETE operations in Oracle, DBDetective
would detect attacks with higher accuracy because Oracle
controls storage with a percent page utilization. This engine
setting prevents deleted records from being overwritten until
a page contains a signi cant quantity of deleted data.</p>
      <p>To verify the presence of malicious operations, a
repeatable analysis analysis must be guaranteed. We will develop
algorithms to collect the minimal subset of storage artifacts
needed to reproduce our results. These collected storage
artifacts must be su cient to verify the security breach
independent of our analysis. For example, such functionality
is needed to present evidence in court.</p>
    </sec>
    <sec id="sec-10">
      <title>CONCLUSION</title>
      <p>In this work, we presented page carving and our page
carving implementation, DBCarver. Future work will expand
this method to include support for column-store and NoSQL
DBMSes, o er meta-querying functionality, and incorporate
anti-forensic methods to further protect data. We also
presented methods that use page carving to detect security
breaches in untrusted environments. DBDetective
considered an attack where logging was disabled, DBStorageAuditor
addressed DBMS le tampering, and future work will
address tampering of the system global clock to backdate logs.
5.</p>
    </sec>
    <sec id="sec-11">
      <title>ACKNOWLEDGMENTS</title>
      <p>This work was partially funded by the US National
Science Foundation Grant CNF-1656268.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>B.</given-names>
            <surname>Carrier</surname>
          </string-name>
          .
          <article-title>The sleuth kit</article-title>
          .
          <source>TSK</source>
          . http://www.sleuthkit.org/sleuthkit,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>L.</given-names>
            <surname>Garber</surname>
          </string-name>
          .
          <article-title>Encase: A case study in computer-forensic technology</article-title>
          .
          <source>IEEE Computer Magazine January</source>
          ,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <surname>S.</surname>
          </string-name>
          <article-title>Gar nkel. Anti-forensics: Techniques, detection and countermeasures</article-title>
          .
          <source>In 2nd International Conference on i-Warfare and Security</source>
          , volume
          <volume>20087</volume>
          , pages
          <fpage>77</fpage>
          {
          <fpage>84</fpage>
          .
          <string-name>
            <surname>Citeseer</surname>
          </string-name>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <surname>S. L.</surname>
          </string-name>
          <article-title>Gar nkel. Automating disk forensic processing with sleuthkit, xml, and python</article-title>
          .
          <source>SADFE</source>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>R. T.</given-names>
            <surname>Mercuri</surname>
          </string-name>
          .
          <article-title>On auditing audit trails</article-title>
          .
          <source>Communications of the ACM</source>
          ,
          <volume>46</volume>
          (
          <issue>1</issue>
          ):
          <volume>17</volume>
          {
          <fpage>20</fpage>
          ,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>O</given-names>
            <surname>ceRecovery.</surname>
          </string-name>
          <article-title>Recovery for mysql</article-title>
          . http://www.o cerecovery.
          <source>com/.</source>
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>J. M.</given-names>
            <surname>Peha</surname>
          </string-name>
          .
          <article-title>Electronic commerce with veri able audit trails</article-title>
          .
          <source>In Proceedings of ISOC. Citeseer</source>
          ,
          <year>1999</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <surname>Percona</surname>
          </string-name>
          .
          <article-title>Percona data recovery tool for innodb</article-title>
          . https://launchpad.net/percona
          <article-title>-data-recovery-tool-forinnodb.</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <surname>G. G. Richard III</surname>
          </string-name>
          and
          <string-name>
            <given-names>V.</given-names>
            <surname>Roussev</surname>
          </string-name>
          .
          <article-title>Scalpel: A frugal, high performance le carver</article-title>
          .
          <source>In DFRWS</source>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>R. T.</given-names>
            <surname>Snodgrass</surname>
          </string-name>
          et al.
          <article-title>Tamper detection in audit logs</article-title>
          .
          <source>In Proceedings of the Thirtieth international conference on Very large data bases-</source>
          Volume
          <volume>30</volume>
          , pages
          <fpage>504</fpage>
          {
          <fpage>515</fpage>
          . VLDB Endowment,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>P.</given-names>
            <surname>Stahlberg</surname>
          </string-name>
          , G. Miklau, and
          <string-name>
            <given-names>B. N.</given-names>
            <surname>Levine</surname>
          </string-name>
          .
          <article-title>Threats to privacy in the forensic analysis of database systems</article-title>
          .
          <source>In Proceedings of the 2007 ACM SIGMOD international conference on Management of data</source>
          , pages
          <volume>91</volume>
          {
          <fpage>102</fpage>
          . ACM, Citeseer,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>J.</given-names>
            <surname>Wagner</surname>
          </string-name>
          et al.
          <article-title>Database forensic analysis through internal structure carving</article-title>
          .
          <source>In DFRWS</source>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>J.</given-names>
            <surname>Wagner</surname>
          </string-name>
          et al.
          <article-title>Database image content explorer: Carving data that does not o cially exist</article-title>
          .
          <source>In DFRWS</source>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>J.</given-names>
            <surname>Wagner</surname>
          </string-name>
          et al.
          <article-title>Carving database storage to detect and trace security breaches</article-title>
          .
          <source>In DFRWS</source>
          ,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>J.</given-names>
            <surname>Wagner</surname>
          </string-name>
          et al.
          <article-title>Database forensic analysis with dbcarver</article-title>
          .
          <source>In CIDR</source>
          ,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>J.</given-names>
            <surname>Wagner</surname>
          </string-name>
          et al.
          <article-title>Detecting database le tampering through page carving</article-title>
          .
          <source>In EDBT</source>
          ,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>J.</given-names>
            <surname>Wagner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Rasin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. H. T.</given-names>
            <surname>That</surname>
          </string-name>
          , and
          <string-name>
            <given-names>T.</given-names>
            <surname>Malik</surname>
          </string-name>
          . Pli:
          <article-title>Augmenting live databases with custom clustered indexes</article-title>
          .
          <source>In SSDBM, page 36. ACM</source>
          ,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>