Maarten,
Your test results are pretty great. I really like your breakdown of the signatures by category. I will caution that scan times will vary quite heavily depending on what you’re scanning, based on Target type (https://www.clamav.net/documents/clamav-file-types).
In addition, it’s important to distinguish between load and scan times. The time reported by clamscan is both load + scan. If you just want scan time, you will want to load the database with clamd and then test the scantime with clamdscan.
Regarding load time vs scantime, all of the signatures must be loaded, but depending on the target type of the file being scanned, not all of the signatures will be matched against the file. That is, daily_Win.ldb might take the longest to load due to the number of signatures or complexity of the signatures but when scanning a PDF, they probably won’t impact scan time, as Win signatures are probably mostly target type 1 (PE file).
I’ve bit of time today investigating what I believe is responsible for slow load and scan times for the Phishtank sigs. I had a hunch, based on a conversation we saw a while back in the mailing list, that the identical beginning for URL-based signatures result in an un-balanced and inefficient tree for matching. That is, some 3000 signatures each began with either:
- href="http:// (687265663d22687474703a2f2f)
- HYPERLINK"http (48595045524c494e4b2022687474703a2f2f)
- S/URI/URI(http:// (532f5552492f55524928687474703a2f2f)
Looking at a few of the Phish.Phishing signatures, these appear to have the same issue (href="http:// prefix). In testing with scan of a PDF document, I was able to reduce the scan time from 31.987 sec down to 2.632 sec simply by changing the start of the Phishtank signatures for the following:
- href="http://
- from: 687265663d22687474703a2f2f
- to: 687265663d2268747470{3-4}
- HYPERLINK "http
- from: 48595045524c494e4b2022687474703a2f2f
- to: 48595045524c494e4b202268747470{3-4}
- S/URI/URI(http://
- from: 532f5552492f55524928687474703a2f2f
- to: 532f5552492f5552492868747470{3-4}
This should get the same detection with a faster load and scan time, and will accommodate for httpS for better coverage. To turn lemonade into really good lemonade, we may be able to take the above optimization and apply it to the Phish.Phishing signatures identified by Maarten to reduce scan times further to levels below those before the addition of the Phishtank signatures.
As noted by Maarten as well, the Phish.Phishing sigs are Target type 0, whereas we’d split the Phishtank.Phishing signatures up by target type to reduce scan times of files where the signatures won’t apply. It should also speed things up quite a bit for other file types to split those up by Target types.
Further research into scan time optimization is definitely welcome and appreciated.
Regards,
Micah
From: clamav-users <clamav-users-bounces@lists.clamav.net> on behalf of Maarten Broekman via clamav-users <clamav-users@lists.clamav.net>
Reply-To: ClamAV users ML <clamav-users@lists.clamav.net>
Date: Tuesday, April 9, 2019 at 12:00 PM
To: ClamAV users ML <clamav-users@lists.clamav.net>
Cc: Maarten Broekman <maarten.broekman@gmail.com>
Subject: Re: [clamav-users] [External] Re: Scan very slow
Clearly the latest daily.cvd is performing better, but the remaining "Phishtank" sigs are not a majority of the slowness.
I unpacked the current (?) cvd (ClamAV-VDB:09 Apr 2019 03-53 -0400:25414:1548262:63:X:X:raynman:1554796413) and then ran a test scan with each part to see what the load times looked like:
daily.cdb ==== Time: 0.007 sec (0 m 0 s)
daily.cfg ==== Time: 0.004 sec (0 m 0 s)
daily.crb ==== Time: 0.006 sec (0 m 0 s)
daily.cvd ==== Time: 11.384 sec (0 m 11 s)
daily.fp ==== Time: 0.009 sec (0 m 0 s)
daily.ftm ==== Time: 0.005 sec (0 m 0 s)
daily.hdb ==== Time: 0.303 sec (0 m 0 s)
daily.hdu ==== Time: 0.006 sec (0 m 0 s)
daily.hsb ==== Time: 1.093 sec (0 m 1 s)
daily.hsu ==== Time: 0.005 sec (0 m 0 s)
daily.idb ==== Time: 0.006 sec (0 m 0 s)
daily.ldb ==== Time: 5.563 sec (0 m 5 s)
daily.ldu ==== Time: 0.005 sec (0 m 0 s)
daily.mdb ==== Time: 0.061 sec (0 m 0 s)
daily.mdu ==== Time: 0.007 sec (0 m 0 s)
daily.msb ==== Time: 0.005 sec (0 m 0 s)
daily.msu ==== Time: 0.005 sec (0 m 0 s)
daily.ndb ==== Time: 0.017 sec (0 m 0 s)
daily.ndu ==== Time: 0.005 sec (0 m 0 s)
daily.pdb ==== Time: 0.010 sec (0 m 0 s)
daily.sfp ==== Time: 0.006 sec (0 m 0 s)
daily.wdb ==== Time: 0.014 sec (0 m 0 s)
So, half the run time of a clamscan is from the daily.ldb. To break it down farther, I split the daily.ldb into "daily_<virus>.ldb" where <virus> is the first part of the dot-separated signature name.
daily_Andr.ldb ==== Time: 0.008 sec (0 m 0 s)
daily_Archive.ldb ==== Time: 0.009 sec (0 m 0 s)
daily_Asp.ldb ==== Time: 0.004 sec (0 m 0 s)
daily_Doc.ldb ==== Time: 0.116 sec (0 m 0 s)
daily_Eicar-Test-Signature.ldb ==== Time: 0.009 sec (0 m 0 s)
daily_Email.ldb ==== Time: 0.014 sec (0 m 0 s)
daily_Emf.ldb ==== Time: 0.007 sec (0 m 0 s)
daily_Heuristics.ldb ==== Time: 0.006 sec (0 m 0 s)
daily_Html.ldb ==== Time: 0.010 sec (0 m 0 s)
daily_Hwp.ldb ==== Time: 0.005 sec (0 m 0 s)
daily_Img.ldb ==== Time: 0.006 sec (0 m 0 s)
daily_Ios.ldb ==== Time: 0.006 sec (0 m 0 s)
daily_Java.ldb ==== Time: 0.005 sec (0 m 0 s)
daily_Js.ldb ==== Time: 0.007 sec (0 m 0 s)
daily_Legacy.ldb ==== Time: 0.006 sec (0 m 0 s)
daily_Lnk.ldb ==== Time: 0.005 sec (0 m 0 s)
daily_Mp4.ldb ==== Time: 0.005 sec (0 m 0 s)
daily_Multios.ldb ==== Time: 0.005 sec (0 m 0 s)
daily_Osx.ldb ==== Time: 0.008 sec (0 m 0 s)
daily_Pdf.ldb ==== Time: 0.007 sec (0 m 0 s)
daily_Phish.ldb ==== Time: 1.612 sec (0 m 1 s)
daily_Phishtank.ldb ==== Time: 0.146 sec (0 m 0 s)
daily_Php.ldb ==== Time: 0.006 sec (0 m 0 s)
daily_Ppt.ldb ==== Time: 0.007 sec (0 m 0 s)
daily_Py.ldb ==== Time: 0.006 sec (0 m 0 s)
daily_Rtf.ldb ==== Time: 0.006 sec (0 m 0 s)
daily_Svg.ldb ==== Time: 0.005 sec (0 m 0 s)
daily_Swf.ldb ==== Time: 0.007 sec (0 m 0 s)
daily_Ttf.ldb ==== Time: 0.005 sec (0 m 0 s)
daily_Txt.ldb ==== Time: 0.009 sec (0 m 0 s)
daily_Unix.ldb ==== Time: 0.008 sec (0 m 0 s)
daily_Vbs.ldb ==== Time: 0.009 sec (0 m 0 s)
daily_Win.ldb ==== Time: 3.391 sec (0 m 3 s)
daily_Xls.ldb ==== Time: 0.009 sec (0 m 0 s)
daily_Xml.ldb ==== Time: 0.007 sec (0 m 0 s)
"Phish.", not "Phishtank.", and "Win." are the longest run times. Looking at the number of signatures in each, the 'Phish.' signatures are taking a disproportionate amount of time to load compared to the other signatures:
216 daily_Andr.ldb
3 daily_Archive.ldb
1 daily_Asp.ldb
2096 daily_Doc.ldb
1 daily_Eicar-Test-Signature.ldb
1017 daily_Email.ldb
2 daily_Emf.ldb
5 daily_Heuristics.ldb
250 daily_Html.ldb
1 daily_Hwp.ldb
15 daily_Img.ldb
6 daily_Ios.ldb
16 daily_Java.ldb
69 daily_Js.ldb
27 daily_Legacy.ldb
9 daily_Lnk.ldb
1 daily_Mp4.ldb
9 daily_Multios.ldb
175 daily_Osx.ldb
132 daily_Pdf.ldb
2515 daily_Phish.ldb
3516 daily_Phishtank.ldb
18 daily_Php.ldb
5 daily_Ppt.ldb
3 daily_Py.ldb
28 daily_Rtf.ldb
1 daily_Svg.ldb
103 daily_Swf.ldb
2 daily_Ttf.ldb
140 daily_Txt.ldb
222 daily_Unix.ldb
21 daily_Vbs.ldb
43928 daily_Win.ldb
165 daily_Xls.ldb
8 daily_Xml.ldb
From the look of it, "Phish." has those REPHISH signatures. Those signatures seem to be looking at any file (Target 0) and have subsignatures that are combined to match depending on which filetype they are 'looking' for (so, href for HTML files, %PDF, Subtype, and URI objects for PDFs, etc) as opposed to the remaining Phishtank sigs which seem to have a separate signature depending on the target type.
Breaking up daily_Win into it's constituent sub-parts doesn't reveal any particular culprit from just a simple scan timing though...
daily_Win.Adware.ldb ==== Time: 0.013 sec (0 m 0 s)
daily_Win.Coinminer.ldb ==== Time: 0.009 sec (0 m 0 s)
daily_Win.Downloader.ldb ==== Time: 0.035 sec (0 m 0 s)
daily_Win.Dropper.ldb ==== Time: 0.240 sec (0 m 0 s)
daily_Win.Exploit.ldb ==== Time: 0.016 sec (0 m 0 s)
daily_Win.Ircbot.ldb ==== Time: 0.006 sec (0 m 0 s)
daily_Win.Keylogger.ldb ==== Time: 0.010 sec (0 m 0 s)
daily_Win.ldb ==== Time: 3.418 sec (0 m 3 s)
daily_Win.Macro.ldb ==== Time: 0.009 sec (0 m 0 s)
daily_Win.Malware.ldb ==== Time: 0.731 sec (0 m 0 s)
daily_Win.Packed.ldb ==== Time: 0.131 sec (0 m 0 s)
daily_Win.Packer.ldb ==== Time: 0.008 sec (0 m 0 s)
daily_Win.Phishing.ldb ==== Time: 0.005 sec (0 m 0 s)
daily_Win.Proxy.ldb ==== Time: 0.005 sec (0 m 0 s)
daily_Win.Ransomware.ldb ==== Time: 0.019 sec (0 m 0 s)
daily_Win.Spyware.ldb ==== Time: 0.006 sec (0 m 0 s)
daily_Win.Tool.ldb ==== Time: 0.008 sec (0 m 0 s)
daily_Win.Trojan.ldb ==== Time: 0.582 sec (0 m 0 s)
daily_Win.Virus.ldb ==== Time: 0.059 sec (0 m 0 s)
daily_Win.Worm.ldb ==== Time: 0.030 sec (0 m 0 s)
158 daily_Win.Adware.ldb
14 daily_Win.Coinminer.ldb
561 daily_Win.Downloader.ldb
8084 daily_Win.Dropper.ldb
216 daily_Win.Exploit.ldb
9 daily_Win.Ircbot.ldb
193 daily_Win.Keylogger.ldb
43928 daily_Win.ldb
1 daily_Win.Macro.ldb
14820 daily_Win.Malware.ldb
4209 daily_Win.Packed.ldb
20 daily_Win.Packer.ldb
2 daily_Win.Phishing.ldb
4 daily_Win.Proxy.ldb
500 daily_Win.Ransomware.ldb
32 daily_Win.Spyware.ldb
121 daily_Win.Tool.ldb
12051 daily_Win.Trojan.ldb
1967 daily_Win.Virus.ldb
966 daily_Win.Worm.ldb
Malware and Trojan take the longest, but they also have a majority of the signatures.
On Tue, Apr 9, 2019 at 11:19 AM Steve Basford <steveb_clamav@sanesecurity.com> wrote:
On 2019-04-09 12:02, Brent Clark via clamav-users wrote:
> Cant those be adopted / managed by Sanesecurity?
>
> For all you know, those are already in Sanesecurity.
They are... and have been for quite some time:
"The following databases are distributed by Sanesecurity, but produced
by Porcupine Signatures"
phishtank.ndb.
Briefly...
Number of sigs in phishtank.ndb: 9,309
eg:
PhishTank.Phishing.6002281, matches:
https://www.phishtank.com/phish_detail.php?phish_id=6002281
So, there is going to be some possible cross over now that
Phish.Phishing.REPHISH_ID_20190404_67-6931549-0
type signatures names from PhishTank feed are in daily.ldb and
daily.ndb.
I'll check back on the thread later.
--
Cheers,
Steve
Twitter: @sanesecurity
_______________________________________________
clamav-users mailing list
clamav-users@lists.clamav.net
https://lists.clamav.net/mailman/listinfo/clamav-users
Help us build a comprehensive ClamAV guide:
https://github.com/vrtadmin/clamav-faq
http://www.clamav.net/contact.html#ml