<p dir="ltr">Hi Víctor, </p>
<p dir="ltr">I'm not that technical ;) Pablo will coment on your ideas, I just tried to give you a deeper context of what Pablo (as part of my team) was doing but for sure, they are welcomed. I let them continue </p>
<div class="gmail_quote">El 27/03/2015 21:25, "Victor Roemer" <<a href="mailto:viroemer@...589...">viroemer@...589...</a>> escribió:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Jamie,<br>
<br>
That's neat, I'll keep an eye on it. :)<br>
<br>
Reviewing over how the "file_identify" works currently, when doing capture or signature<br>
its not possible to also get the file type event via the preprocessor. I'll open an bug for this.<br>
<br>
In order to get the file type events with these further settings, more sophisticated tracking<br>
needs to be in-place in the file_identify preproc; the tricky bits being that the file service code<br>
is generating the events in question; however once a verdict is passed to file service- an<br>
action will be taken at that time.<br>
<br>
To clarify the verdicts -<br>
As I understand it, passing FILE_VERDICT_UNKNOWN is how processing continues further.<br>
The FILE_VERDICT_PENDING when passed to file service api, should cause the packet to be<br>
dropped, in-order to give the interfacing code time to retrieve a true verdict when the re-transmitted<br>
packet is seen.<br>
<br>
On 03/27/15 16:04, Jaime Nebrera wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Víctor,<br>
<br>
Pablo's work is geared towards a more ambitious goal:<br>
<br>
1) Intercept the file and send it to a S3 based storage platform for<br>
further analysis or whatever<br>
<br>
2) Provide as much context about such interception as possible, like from<br>
were to whom, URL, email, etc<br>
<br>
This we hope to open source and make it public as soon as it is usable in<br>
our repository <a href="http://www.github.com/redborder" target="_blank">www.github.com/redborder</a><br>
El 27/03/2015 20:50, "Victor Roemer" <<a href="mailto:viroemer@...589..." target="_blank">viroemer@...589...</a>> escribió:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  Pablo,<br>
<br>
Sorry for the delay. The "file_identify" preprocessor is designed to work<br>
more as a "reputation" based system. I think you will get better millage by<br>
using the new "file_type" rule keyword in a plain-old snort rule.<br>
<br>
Something like this:<br>
<br>
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"GIF file downloaded";<br>
flow:to_client,established; file_type:GIF; sid:1000000;)<br>
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"GIF file downloaded";<br>
flow:to_client,established; file_type:PNG; sid:1000001;)<br>
<br>
<br>
You'll still need to have "file_magic.conf" included in your Snort<br>
configuration, but you will not need the file_identify preprocessor.<br>
<br>
~Victor<br>
<br>
On 03/17/15 4:57, Pablo Cantos Polaino wrote:<br>
<br>
Hello all,<br>
<br>
I already sent this issue to snort-devel with the same subject since I am<br>
not sure if either I am configuring Snort in the right way or there is an<br>
internal malfunction to fix.<br>
<br>
I have been testing the new experimental preprocessor called File Services<br>
in order to get an event every time a file go through our network. To carry<br>
on these tests I have used two pcap files. The first one is a 1GB-size pcap<br>
with a great number of files and the second one is a short pcap generated<br>
on my computer when I downloaded a GIF file.<br>
<br>
My snort.conf file is configured like this at the end:<br>
<br>
include file_magic.conf<br>
<br>
  preprocessor file_inspect: type_id, signature, \<br>
              capture_queue_size 5000, \<br>
              capture_disk /home/file_capture/tmp/<br>
<br>
<br>
<br>
In both cases files are captured by the preprocessor, as you can see below<br>
(1GB pcap output):<br>
<br>
==============================<u></u>==============================<u></u>===================<br>
<br>
  Action Stats:<br>
      Alerts:            0 (  0.000%)<br>
      Logged:            0 (  0.000%)<br>
      Passed:            0 (  0.000%)<br>
Limits:<br>
       Match:            0<br>
       Queue:            0<br>
         Log:            0<br>
       Event:            0<br>
       Alert:            0<br>
Verdicts:<br>
       Allow:      8418451 ( 97.482%)<br>
       Block:            0 (  0.000%)<br>
     Replace:            0 (  0.000%)<br>
   Whitelist:       217492 (  2.518%)<br>
   Blacklist:            0 (  0.000%)<br>
      Ignore:            0 (  0.000%)<br>
<br>
==============================<u></u>==============================<u></u>===================<br>
<br>
<br>
<br>
==============================<u></u>==============================<u></u>===================<br>
<br>
  File Preprocessor Statistics<br>
   Total file type callbacks:            576<br>
   Total file signature callbacks:       578<br>
   Total files would saved to disk:      574<br>
   Total files saved to disk:            320<br>
   Total file data saved to disk:        483039    bytes<br>
   Total files duplicated:               254<br>
   Total files reserving failed:         2<br>
   Total file capture min:               0<br>
   Total file capture max:               2<br>
   Total file capture memcap:            0<br>
   Total files reading failed:           0<br>
   Total file agent memcap failures:     0<br>
   Total files sent:                     0<br>
   Total file data sent:                 0<br>
   Total file transfer failures:         0<br>
<br>
==============================<u></u>==============================<u></u>===================<br>
File type stats:<br>
          Type              Download   (Bytes)      Upload     (Bytes)<br>
           GZ( 33)          2          5580056      0          0<br>
          SWF( 52)          1          65991        0          0<br>
          GIF( 62)          7          16516        0          0<br>
          GIF( 63)          275        151718       0          0<br>
          PNG( 69)          266        256724       0          0<br>
         JPEG( 70)          2          35566        0          0<br>
          BMP(148)          2          4204         0          0<br>
          ICO(149)          21         187894       0          0<br>
             Total          576        6298669      0          0<br>
File signature stats:<br>
          Type              Download   Upload<br>
           GZ( 33)          2          0<br>
          SWF( 52)          1          0<br>
          GIF( 62)          7          0<br>
          GIF( 63)          275        0<br>
          PNG( 69)          266        0<br>
         JPEG( 70)          2          0<br>
          BMP(148)          2          0<br>
          ICO(149)          21         0<br>
             Total          576        0<br>
File type verdicts:<br>
         UNKNOWN:           576<br>
             LOG:           0<br>
            STOP:           0<br>
           BLOCK:           0<br>
          REJECT:           0<br>
         PENDING:           0<br>
    STOP CAPTURE:           0<br>
           Total:           576<br>
File signature verdicts:<br>
         UNKNOWN:           578<br>
             LOG:           0<br>
            STOP:           0<br>
           BLOCK:           0<br>
          REJECT:           0<br>
         PENDING:           0<br>
    STOP CAPTURE:           0<br>
           Total:           578<br>
Total files processed:             68985<br>
Total files data processed:        97156439  bytes<br>
Total files buffered:              576<br>
Total files released:              574<br>
Total files freed:                 2<br>
Total files captured:              574<br>
Total files within one packet:     561<br>
Total buffers allocated:           641<br>
Total buffers freed:               64<br>
Total buffers released:            577<br>
Maximum file buffers used:         64<br>
Total buffers free errors:         0<br>
Total buffers release errors:      0<br>
Total memcap failures:             0<br>
Total memcap failures at reserve:  0<br>
Total reserve failures:            0<br>
Total file capture size min:       0<br>
Total file capture size max:       0<br>
Total capture max before reserve:  2<br>
Total file signature max:          0<br>
Maximum buffers can allocate:      3196<br>
Number of buffers in use:          0<br>
Number of buffers in free list:    2619<br>
Number of buffers in release list: 577<br>
<br>
==============================<u></u>==============================<u></u>===================<br>
<br>
<br>
<br>
Following the instructions given as examples inside the file README.file, I<br>
have included the following rules to get an alert every time Snort detects<br>
a file:<br>
<br>
alert (msg: "GIF file"; gid:146; sid:63; rev:1; metadata: rule-type<br>
<br>
  preproc;)<br>
<br>
<br>
<br>
After that, no alert showed up.<br>
<br>
I went deep inside the code to find out what the reason is and found the<br>
following piece of code that confused me:<br>
<br>
snort/src/dynamic-<u></u>preprocessors/file/file_agent.<u></u>c:601-614<br>
<br>
/*<br>
<br>
   * File type callback when file type is identified<br>
  *<br>
  * For file capture or file signature, FILE_VERDICT_PENDING must be<br>
returned<br>
  */<br>
static File_Verdict file_agent_type_callback(void* p, void* ssnptr,<br>
         uint32_t file_type_id, bool upload, uint32_t file_id)<br>
{<br>
     file_inspect_stats.file_types_<u></u>total++;<br>
     if (file_signature_enabled || file_capture_enabled)<br>
         return FILE_VERDICT_UNKNOWN;<br>
     else<br>
         return FILE_VERDICT_LOG;<br>
}<br>
<br>
<br>
<br>
You can read on the description that FILE_VERDICT_PENDING must be returned<br>
when file capture OR file signature is enabled, but what really the code<br>
does is to return FILE_VERDICT_UNKNOWN when capture or signature are<br>
enabled.<br>
<br>
After see that, I have modified the snort.conf by carrying on the following<br>
changes:<br>
<br>
Replace this:<br>
<br>
preprocessor file_inspect: type_id, signature, \<br>
<br>
               capture_queue_size 5000, \<br>
              capture_disk /home/file_capture/tmp/<br>
<br>
<br>
<br>
By:<br>
<br>
preprocessor file_inspect: type_id<br>
<br>
<br>
This way I forced to go through the ELSE and return a FILE_VERDICT_LOG.<br>
After this change, and using the same two alert rules, we run snort,<br>
getting alerts like these below:<br>
<br>
03/16-12:50:22.350000  [**] [146:63:1] GIF [**] [Priority: 0] {TCP}<br>
<br>
  <a href="http://192.168.202.78:80" target="_blank">192.168.202.78:80</a> <<a href="http://192.168.202.78/" target="_blank">http://192.168.202.78/</a>> <<a href="http://192.168.202.78/" target="_blank">http://192.168.202.78/</a>> -> <a href="http://192.168.203.61:38976" target="_blank">192.168.203.61:38976</a><br>
03/16-12:50:22.350000  [**] [146:63:1] GIF [**] [Priority: 0] {TCP}<a href="http://192.168.202.78:80" target="_blank">192.168.202.78:80</a> <<a href="http://192.168.202.78/" target="_blank">http://192.168.202.78/</a>> <<a href="http://192.168.202.78/" target="_blank">http://192.168.202.78/</a>> -> <a href="http://192.168.203.61:38976" target="_blank">192.168.203.61:38976</a><br>
03/16-12:50:22.350000  [**] [146:63:1] GIF [**] [Priority: 0] {TCP}<a href="http://192.168.202.78:80" target="_blank">192.168.202.78:80</a> <<a href="http://192.168.202.78/" target="_blank">http://192.168.202.78/</a>> <<a href="http://192.168.202.78/" target="_blank">http://192.168.202.78/</a>> -> <a href="http://192.168.203.61:38977" target="_blank">192.168.203.61:38977</a><br>
<br>
<br>
...<br>
<br>
  and getting the following output at the end:<br>
<br>
==============================<u></u>==============================<u></u>===================<br>
<br>
  Action Stats:<br>
      Alerts:          275 (  0.003%)<br>
      Logged:          275 (  0.003%)<br>
      Passed:            0 (  0.000%)<br>
Limits:<br>
       Match:            0<br>
       Queue:            0<br>
         Log:            0<br>
       Event:            0<br>
       Alert:            0<br>
Verdicts:<br>
       Allow:      8418514 ( 97.482%)<br>
       Block:            0 (  0.000%)<br>
     Replace:            0 (  0.000%)<br>
   Whitelist:       217429 (  2.518%)<br>
   Blacklist:            0 (  0.000%)<br>
      Ignore:            0 (  0.000%)<br>
<br>
==============================<u></u>==============================<u></u>===================<br>
<br>
<br>
<br>
<br>
==============================<u></u>==============================<u></u>===================<br>
File Preprocessor Statistics<br>
   Total file type callbacks:            576<br>
   Total file signature callbacks:       0<br>
   Total files would saved to disk:      0<br>
   Total files saved to disk:            0<br>
   Total file data saved to disk:        0         bytes<br>
   Total files duplicated:               0<br>
   Total files reserving failed:         0<br>
   Total file capture min:               0<br>
   Total file capture max:               0<br>
   Total file capture memcap:            0<br>
   Total files reading failed:           0<br>
   Total file agent memcap failures:     0<br>
   Total files sent:                     0<br>
   Total file data sent:                 0<br>
   Total file transfer failures:         0<br>
<br>
==============================<u></u>==============================<u></u>===================<br>
File type stats:<br>
          Type              Download   (Bytes)      Upload     (Bytes)<br>
           GZ( 33)          2          0            0          0<br>
          SWF( 52)          1          0            0          0<br>
          GIF( 62)          7          0            0          0<br>
          GIF( 63)          275        0            0          0<br>
          PNG( 69)          266        0            0          0<br>
         JPEG( 70)          2          0            0          0<br>
          BMP(148)          2          0            0          0<br>
          ICO(149)          21         0            0          0<br>
             Total          576        0            0          0<br>
File signature stats:<br>
          Type              Download   Upload<br>
             Total          0          0<br>
File type verdicts:<br>
         UNKNOWN:           0<br>
             LOG:           576<br>
            STOP:           0<br>
           BLOCK:           0<br>
          REJECT:           0<br>
         PENDING:           0<br>
    STOP CAPTURE:           0<br>
           Total:           576<br>
File signature verdicts:<br>
         UNKNOWN:           0<br>
             LOG:           0<br>
            STOP:           0<br>
           BLOCK:           0<br>
          REJECT:           0<br>
         PENDING:           0<br>
    STOP CAPTURE:           0<br>
           Total:           0<br>
Total files processed:             68987<br>
Total files data processed:        42751396  bytes<br>
Total files buffered:              0<br>
Total files released:              0<br>
Total files freed:                 0<br>
Total files captured:              0<br>
Total files within one packet:     0<br>
Total buffers allocated:           0<br>
Total buffers freed:               0<br>
Total buffers released:            0<br>
Maximum file buffers used:         0<br>
Total buffers free errors:         0<br>
Total buffers release errors:      0<br>
Total memcap failures:             0<br>
Total memcap failures at reserve:  0<br>
Total reserve failures:            0<br>
Total file capture size min:       0<br>
Total file capture size max:       0<br>
Total capture max before reserve:  0<br>
Total file signature max:          0<br>
<br>
==============================<u></u>==============================<u></u>===================<br>
<br>
<br>
<br>
As you can see, in the "File type verdicts" section I got all the files<br>
with verdict LOG. Also, I got 275 alerts that match the 275 GIF files<br>
detected by Snort.<br>
<br>
I am not sure if this is the expected behavior of this feature or maybe I<br>
am not configuring Snort properly.<br>
<br>
Am I doing something wrong or configuring the preprocessor in a wrong way?<br>
<br>
Thanks for your help and best Regards,<br>
<br>
Pablo Cantosredborder.org / <a href="mailto:pcantos@...16842..." target="_blank">pcantos@...16842...</a><br>
<br>
<br>
<br>
This body part will be downloaded on demand.<br>
<br>
<br>
<br>
This body part will be downloaded on demand.<br>
<br>
<br>
<br>
------------------------------<u></u>------------------------------<u></u>------------------<br>
Dive into the World of Parallel Programming The Go Parallel Website,<br>
sponsored<br>
by Intel and developed in partnership with Slashdot Media, is your hub for<br>
all<br>
things parallel software development, from weekly thought leadership blogs<br>
to<br>
news, videos, case studies, tutorials and more. Take a look and join the<br>
conversation now. <a href="http://goparallel.sourceforge.net/" target="_blank">http://goparallel.sourceforge.<u></u>net/</a><br>
______________________________<u></u>_________________<br>
Snort-users mailing list<br>
<a href="mailto:Snort-users@lists.sourceforge.net" target="_blank">Snort-users@...3783...<u></u>net</a><br>
Go to this URL to change user options or unsubscribe:<br>
<a href="https://lists.sourceforge.net/lists/listinfo/snort-users" target="_blank">https://lists.sourceforge.net/<u></u>lists/listinfo/snort-users</a><br>
Snort-users list archive:<br>
<a href="http://sourceforge.net/mailarchive/forum.php?forum_name=snort-users" target="_blank">http://sourceforge.net/<u></u>mailarchive/forum.php?forum_<u></u>name=snort-users</a><br>
<br>
Please visit <a href="http://blog.snort.org" target="_blank">http://blog.snort.org</a> to stay current on all the latest<br>
Snort news!<br>
<br>
</blockquote></blockquote>
</blockquote></div>