[Bro] Extract files based on magic number using Bro 2.2

Siwek, Jonathan Luke jsiwek at illinois.edu
Fri Jan 24 07:21:22 PST 2014

On Jan 24, 2014, at 6:44 AM, Marius Portaas Haugen <mariusph at ifi.uio.no> wrote:

> I'm just wondering; Is it possible to extract files based solely on 
> their magic number using Bro 2.2
> In Bro 2.1, it was possible to extract files just by comparing the 
> magic number
> with the first X bytes. I used the script provided here, with great 
> success:
> http://scrapbook.zscaler.com/2012/05/bro-script-to-extract-artifacts-from.html
> However, in Bro 2.2, thigs seem to have changed. Most examples and docs 
> now only
> seem to use the MIME-type to determine if a file will be extracted or 
> not, e.g. here:
> http://www.bro.org/sphinx-git/frameworks/file-analysis.html

You can try handling the “file_new” event, compare f$bof_buffer (Beginning Of File Buffer) to whatever magic you want, and then add the file extraction analyzer to f if it matches (similar to the examples in that webpage you cite, except using f$bof_buffer as the condition instead of f$mime_type).

The “file_new” event is network protocol agnostic so if it’s important to only extract stuff over HTTP, check the value of f$source to find the protocol over which it’s transferred.

> I also see that there har been included some sort of "magic number 
> database"(/bro/share/bro/magic/), but I find little
> documentation on what its role is in regards of file extraction, as 
> well as the formatting that is being used.

The magic database is used by libmagic (the library which implements [1]) to determine the value of f$mime_type.  See the magic(5) man page [2] for how magic files are formatted.

- Jon

[1] http://www.darwinsys.com/file/
[2] http://linux.die.net/man/5/magic

More information about the Bro mailing list