Snort 2.9.5.5 pkg. v3.0.0 – Update Released
-
An update to Snort on pfSense is now available. This release updates the Snort binary to version 2.9.5.5. The GUI package is updated to 3.0.0. This package version contains significant improvements to the Preprocessor configurations for frag3, stream5, http_inspect, ftp_server and ftp_client. See release notes below for details.
IMPORTANT INSTALL NOTE FOR 2.0.x USERS ONLY:
If you are still using 2.0.3 pfSense, you must install this Snort update by first removing the Snort package and then reinstalling it. DO NOT simply click the XML or PKG icons in the Packages window. This Snort package update contains a new version of the Snort binary, and the only way to reliably update some internal libraries is via a complete remove and reinstall. First, go to the Global Settings tab in your old Snort and scroll to the bottom of the page and verify the "Keep settings on de-install" checkbox is checked. This will preserve your existing Snort configuration.Now go to the System…Packages menu and click the X icon next to Snort on the Installed Packages tab. When the old package is removed, go back to the Available Packages tab and then select and install Snort again.
–--------------------------------------------------------
New Features:
1. Several of the preprocessors now support multi-engine configurations in the GUI. This allows customized preprocessor settings based on target hosts or networks. The frag3, http_inspect, stream5, ftp_client and ftp_server preprocessors can now be configured with multiple targets based on specified hosts or networks. The new functionality is accessed via the PREPROCESSORS tab for a Snort interface. Each multi-engine preprocessor provides a global configuration section for setting parameters that impact all instances of the preprocessor. The individual target-based parameters are then configured on a per-engine basis. The engine targets are pre-defined host or network Aliases. Controls are provided on the multi-engine configuration GUI to allow selection and import of existing Aliases into a new target-based instance of the preprocessor.
2. Additional configuration parameters have been added for the frag3, stream5, http_inspect, ftp_client and ftp_server preprocessors along with the sensitive data preprocessor.
3. Instead of becoming grayed-out when not available, certain form controls are now hidden completely to reduce screen clutter. When enabled and required, these form controls will become visible.
4. The underlying Snort binary is updated to the latest 2.9.5.5 version. See http://www.snort.org for change log information for the 2.9.5.5 binary.
5. The Sensitive Data Preprocessor configuration now allows the selection of which types of sensitive data to alert on. A multi-select drop-down list allows selection of U.S. Social Security Numbers, Credit Card Numbers, U.S. Telephone numbers or E-Mail Addresses. Thanks to Forum contributor marcelloc for this improvement!
NOTE: this version requires significant changes in the internal structure of the Snort package configuration section within the pfSense config.xml file. For this reason, once upgraded to the 3.0.0 Snort package, the new config.xml is not backwards compatible with older Snort package versions. Be aware of this if you restore an older version of the config.xml file on pfSense. Doing so will require either downgrading Snort to match the older package version, or deleting all the configured Snort interfaces and recreating them. During installation of the 3.0.0 package, existing Snort settings will be automatically migrated to the new format.
Snort Sync Users: if you are currently using the experimental Snort Sync feature, there are some upgrade details to consider. First, disable Snort Sync on the master firewall and upgrade it first. Then upgrade all the slave Snort Sync targets to the same Snort package version as the master. Once all hosts have been upgraded, you can safely re-enable Snort Sync again. During the package upgrade, Snort Sync will automatically be disabled as a precaution on any firewall where it is enabled.
-
AWESOME Bill!
Great work!
-
AWESOME Bill!
Great work!
Thanks! I took the plunge and updated my own home network production firewall this morning. The update installed with no issues. I am using the 64-bit 2.1-RELEASE version of pfSense.
The big changes in this new version are on the Preprocessors tab for an interface. There you can now define individual preprocessor parameter settings for specific IP networks or hosts for several of the preprocessors. No longer do you just have to settle for defaults for all protected hosts. Now you can customize some of the settings depending on the characteristics of the protected host.
Some screenshots of the new feature are attached below. Multiple frag3 targets have been defined. For each target you can customize the parameter settings. For example, notice in the screenshots how the Web Farm IP target Alias has been customized for Linux as the OS. The other frag3 engine targets can have their own unique operating system choices, for example. The attached screen capture is an older image prior to the inclusion of the Alias import button. Clicking the "e" icon brings up the Edit Details page for the selected frag3 engine preprocessor. On that page you can set the customizable parameters for that instance of the frag3 engine.
Bill
-
Attached is a screen capture of the new HTTP_Inspect multi-engine section on the Preprocessors tab. This one shows the new Alias import button (the Up-Arrow icon next to the Plus icon). Clicking this takes you to a page listing all the Aliases available for use at HTTP_Inspect engine targets. All of the icons have pop-up tooltips to describe their function. Just hover over the icon a moment and the tooltip text will appear that describes the control's function.
As with the Frag3 engine described above, clicking the "e" icon brings up a details edit page for the selected HTTP_Inspect engine target. There you can specify settings such as the type of web server software (e.g., Apache, IIS, etc.) along with various other parameters.
Bill
![Multiple HTTP_INSPECT server configs.png](/public/imported_attachments/1/Multiple HTTP_INSPECT server configs.png)
![Multiple HTTP_INSPECT server configs.png_thumb](/public/imported_attachments/1/Multiple HTTP_INSPECT server configs.png_thumb) -
Can you explain WHAT the preproc. are doing exactly?
Just so people understand why they are there and what they do?
-
Can you explain WHAT the preproc. are doing exactly?
Just so people understand why they are there and what they do?
It's kind of hard to explain in a short paragraph. Essentially they pre-condition the captured packet stream to make it easier for the signature detection algorithms to do their work. For example, the Frag3 engine handles defragmenting packets and assembling them back into their full size. Because different operating systems can interpret fragmented packets in different ways, you now have the option of customizing the frag3 reassembly of packets based on the operating system of the hosts Snort is protecting. Another useful preprocessor is the Stream5 engine. It reassembles TCP streams and keeps track of a complete conversation. Together, the Frag3 and Stream5 preprocessors ensure that a bad actor can't evade the signature detection engine by spreading the pieces of bad data across several packets or fragments. You see, at its heart, the Snort detection engine is just looking for a particular sequence of bits. Without something up front to make sure packets are reassembled into a coherent "message" before sending them to the detection engine, it would be easy to evade the signature detection by just fragmenting the packets and otherwise breaking the "message" up into bits and pieces. Snort would then only see short pieces of the bad data sequence, but never the entire signature at once. Thus it would not alert. On the other hand, the target host's operating system network stack would happily reassemble the fragments and pieces and then be vulnerable to the attack. This is a bit oversimplified, but hopefully you get the general idea.
Similarly, the HTTP_Inspect preprocessor performs customized normalization on data coming and going from web servers and clients based on, for example, whether the target server is running Apache or Microsoft IIS. Being able to finely tune the preprocessor according to the hosts behind Snort is important to reducing false positives and at the same time catching all the bad stuff.
Here is a link to the Snort Manual with more information on the preprocessors – http://manual.snort.org/node17.html
Bill
-
Getting this when trying to start Snort on 2.0.3
nort[26427]: FATAL ERROR: The dynamic detection library "/usr/local/lib/snort/dynamicrules/web-misc.so" version 1.0 compiled with dynamic engine library version 1.17 isn't compatible with the current dynamic engine library "/usr/local/lib/snort/dynamicengine/libsf_engine.so" version 2.1.
Dec 11 16:40:00 snort[26427]: FATAL ERROR: The dynamic detection library "/usr/local/lib/snort/dynamicrules/web-misc.so" version 1.0 compiled with dynamic engine library version 1.17 isn't compatible with the current dynamic engine library "/usr/local/lib/snort/dynamicengine/libsf_engine.so" version 2.1. -
Getting this when trying to start Snort on 2.0.3
nort[26427]: FATAL ERROR: The dynamic detection library "/usr/local/lib/snort/dynamicrules/web-misc.so" version 1.0 compiled with dynamic engine library version 1.17 isn't compatible with the current dynamic engine library "/usr/local/lib/snort/dynamicengine/libsf_engine.so" version 2.1.
Dec 11 16:40:00 snort[26427]: FATAL ERROR: The dynamic detection library "/usr/local/lib/snort/dynamicrules/web-misc.so" version 1.0 compiled with dynamic engine library version 1.17 isn't compatible with the current dynamic engine library "/usr/local/lib/snort/dynamicengine/libsf_engine.so" version 2.1.OK, on 2.0.3 you will need to do the whole "remove with "X" icon and then reinstall" procedure. As a further precaution, you can manually delete the entire snort directory under /usr/local/lib before reinstalling. The 2.1 releases with PBI don't have this issue.
Bill
-
:D Thanks man!
-
:D Thanks man!
Doing the complete remove and reinstall should fix it. The problem is caused by the Snort shared-object rules. The Snort VRT tags them with a "version", and so the new ones are tagged with 2.9.5.5 instead of 2.9.4.6. With the old package management system in 2.0.3 of pfSense, I am a bit handicapped with a Snort update because the Package Manager code does not actually discriminate between a GUI reinstall and a package reinstall. You have separate icons for each task (the XML and PKG icons), but they actually both call the same piece of code that just copies down the GUI files. They don't physically remove the binaries and reinstall those. Only the "X" package remove icon does that.
Because of this limitation in 2.0.3, the un-install code in my Snort package can't delete this directory safely. This is because it has no way of knowing if the user clicked the XML icon or the PKG icon. If the directory is removed when only the GUI components are being reinstalled, then Snort is broken badly. The directory can only be safely removed when the Snort binary is being removed and reinstalled.
I updated the original post at the top of this thread to warn others on 2.0.x of pfSense to perform a remove first, then an install, of Snort. Users on 2.1 of pfSense can simply click the PKG icon to update Snort. The new PBI process in 2.1 takes care of the remove and install automatically.
Bill
-
Just updated Snort to the new version on a pfSense 2.1 32-bit system. Worked without any issues!
Thanks Bill! ;D
-
Just updated Snort to the new version on a pfSense 2.1 32-bit system. Worked without any issues!
Thanks Bill! ;D
Good to hear and thanks for the positive feedback. Things definitely work much smoother with package upgrades on the new PBI platform of pfSense 2.1. All the 2.0.x holdouts need to give it up and just upgrade to 2.1… ;D
Bill
-
Thanks.
2.1 x64, no problem. -
Will do when it works :D
Just updated Snort to the new version on a pfSense 2.1 32-bit system. Worked without any issues!
Thanks Bill! ;D
Good to hear and thanks for the positive feedback. Things definitely work much smoother with package upgrades on the new PBI platform of pfSense 2.1. All the 2.0.x holdouts need to give it up and just upgrade to 2.1… ;D
Bill
-
Been looking forward to this. In the wan Preprocessor tab under the frag3 engine configuration. I add a new engine and click the aliases button and choose one from the list but it doesn't seem to save the selection. If i type in the alias it does save. Can you do a quick check to make sure its just not me :)
-
Bill,
Earlier you noted there were some issues with Snort that were dependent on a pfSense core update. Are any of those issues being covered by this update or are we still waiting for the pfSense update?Thank,
Rick -
Been looking forward to this. In the wan Preprocessor tab under the frag3 engine configuration. I add a new engine and click the aliases button and choose one from the list but it doesn't seem to save the selection. If i type in the alias it does save. Can you do a quick check to make sure its just not me :)
I just did this on my production firewall this morning and had no issues. I clicked the Up Arrow icon to add an Alias as a new Frag3 target. Select an Alias and then click SAVE. You should return to the Preprocessors tab. Now click the "e" icon to open the Frag3 Engine Details window where you can choose other parameters. Click SAVE at the bottom of that window when finished, then finally click SAVE at the bottom of the Preprocessors window.
Did you use the Up Arrow icon from the Preprocessors tab, or did you click the + (plus) icon to add a new engine from scratch?
Update: I just tried it both ways and it worked each way (that is, using the Up Arrow icon to add an Alias entry, or using the + icon to create a new blank engine and choosing an Alias using the Aliases button on the details edit screen).Bill
-
Bill,
Earlier you noted there were some issues with Snort that were dependent on a pfSense core update. Are any of those issues being covered by this update or are we still waiting for the pfSense update?Thank,
RickStill waiting on a pfSense update for that. I believe you are talking about the premature clearing of the Snort block table upon a firewall filter_reload() process. That is something totally outside the realm of the Snort package.
Bill
-
Bill,
Yep, that was it… thanks for the quick reply! :)I was just wondering, since this is such a comprehensive update, if you had "found something" since then that was a fix rather than depending on a core pfSense or 8.3 correction.
Rick
-
Bill,
Yep, that was it… thanks for the quick reply! :)I was just wondering, since this is such a comprehensive update, if you had "found something" since then that was a fix rather than depending on a core pfSense or 8.3 correction.
Rick
No. There appears to be a misconception among folks with the way Snort works on pfSense. Snort itself does not "block" anything directly. It analyzes copies of network packets, and when a packet matches a signature, Snort fires an "alert". This "alert" is written to the log file and then passed to a FreeBSD packet filter utility which is asked to insert the offending packet's IP address into the firewall block table. The packet filter engine of FreeBSD is the firewall. The packet filter table used by Snort is called the "snort2c" table. This table is totally managed by the packet filter engine of FreeBSD and not by Snort. Snort does not clear the table. All it can do is ask the packet filter engine to insert an offending IP. Once it does that, Snort is done and no longer can interact with the block table. Even the regular automatic clearing is actually done by a cron job that calls the pfctl utility of the packet filter. That utility clears the packet filter tables. You could insert your own IPs into that block table completely outside of Snort and they would still be blocked just as if Snort had placed them there.
With the upgrade to pfSense 2.1 and the move the FreeBSD 8.3, something changed in the way the FreeBSD code handles the packet filter tables on something called a filter_reload() function call. Now that call clears all the block tables of IP addresses – including Snort's. Snort can't stop it from doing that. A number of internal events (not Snort related events) can trigger that filter_reload() function. When it is triggered, the block table is cleared. No change in the Snort code can fix this.
As has been posted in a number of threads, the premature clearing of the block table is not a problem. This does not mean Snort never blocks again. Folks give me the impression with all the questions about this that they think if the block table is cleared, Snort never blocks anything else. That is not the case. On the next offending packet from a host, the host's IP will be inserted into the block table and it will get blocked again. I think folks panic because they look at the Block tab and don't see tons of IP addresses listed. The premature clearing is a nuisance, but not a showstopper.
Snort never knows the block table has been cleared, so there is no way for it to "re-populate it" as some folks have suggested. Besides, why should Snort waste time figuring out what is missing and what should be put back into that table?
Bill