+^T~FdZddlmZddlZddlmZddlmZddlm Z ddl m Z m Z ddl mZdd lmZdd lmZdd lmZdd lmZmZmZdd lmZmZddlmZe rddlm Z ee!e"e fZ#e e$Z%GddeeZ&dS)u  This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program.  If not, see . Copyright © 2019 Cloud Linux Software Inc. This software is also available under ImunifyAV commercial license, see ) annotationsN)Queue) ExitStack) getLogger) TYPE_CHECKINGList) inactivity)Malware) LicenseError) MessageType) MessageSink MessageSourceexpect)recurring_checksafe_cancel_task)malware_response)MalwareMRSUploadceZdZdZejdZdZdZdZ dZ dd Z e e jd Zed d ZddZe e jddZdS) MRSUploaderzFailed to submit a filez-(?:suspicious\..+|[CS]MW-SUS-.+|SMW-HEUR-ELF)c,t|_dSN)r _upload_queueselfs Y/opt/imunify360/venv/lib/python3.11/site-packages/imav/malwarelib/plugins/mrs_uploader.py__init__zMRSUploader.__init__6s,1GGc~K||_||_|||_dSr)_sink_loop create_taskupload _upload_task)rloopsinks r create_sourcezMRSUploader.create_source9s8   ,,T[[]];;rc KdSr)rr$s r create_sinkzMRSUploader.create_sink>s  rc>Kt|jd{VdSr)rr#rs rshutdownzMRSUploader.shutdownAs/t011111111111rreturntuplec g}g}g}|D]\}}d}d}d} |dD]_} || ddz}|t| do|j| dz}| | d z} `t j||d} |r|| |r|| | r|| |||fS)NFhitsextended_suspicious suspiciousmatcheshash)itemsgetbool SUSP_PATTERNmatchrHitInfoappend) rresults maliciousr1r0filedatais_extended_suspicious is_suspicious is_malicioushithit_infos r_separate_hits_by_typez"MRSUploader._separate_hits_by_typeDs;   !--// + +JD$%* "!M LF| 6 6&#''2G*O*OO& %@)//I??"" C $5 55 '/d6lCCH% +#**84444 +!!(++++ +  ****&999rcK|d}|dStjstddS||\}}}|r4|jtj|dd{V|r4|jtj|dd{V|r4|jtj|dd{V|d d}|rBd |D}|jtj|d d{VdSdS) Nr;z"Uploading files to MRS is disabledr<)r/ upload_reasonr1zextended-suspicioussummaryerrorscPg|]#}tj|d|d$S)r=r3)rr9.0rBs r z,MRSUploader.process_scan..s=!(Vc&kBBr scan_error) Config SEND_FILESloggerinforDrprocess_messager rr5)rmessager;malicious_hitssuspicious_hitsextended_suspicious_hitsrH error_hitss r process_scanzMRSUploader.process_scan\s)$ ? F   KK< = = = F  ' ' 0 0    $  *,,,'{         *,,,(         $ *,,,1"7        #''11  !J*,,,#<           rrc\ K|jd{V\}}|d}tj|jd|D|}d}t 5}||jj|23d{V fd|D}|rXd} ||||d{V8#tj $r%}t d|Yd}~gd}~wwxYwp6 dddn #1swxYwY|rt ddSdS)Nr/c3$K|] }|jV dSr)r3rJs r z%MRSUploader.upload..s$22c222222rTc0g|]}|jv |jSr()r3r=)rKrBunknown_hashess rrLz&MRSUploader.upload..s.!$N0J0JCH0J0J0JrFzFailed to upload files: %sz1All files are known to MRS. Skipping uploading...) rr5rcheck_known_hashesr rcallback task_done _upload_files UploadFailurerPerrorrQ) rrFrSr/hashes_generator no_new_hashesstackfileser]s @rr"zMRSUploader.uploads $((** * * * * * *  07v+> J22T222M   [[ FE NN4-7 8 8 8(8 F F F F F F Fn(,F$)MF"00 wOOOOOOOOOO+9FFF %A1EEEEEEEEF F )9(8 F F F F F F F F F F F F F F F  M KKK L L L L L M MsH#"DC5 DB=<D=C1 C,'D,C11DD Drg list[str]rFstrrSrcKtjd5|D]} tj||d{V #t $r'}t d||Yd}~n[d}~wt$rK}d |j |j }t d||j Yd}~d}~wwxYwddddS#1swxYwYdS)N mrs_upload)rFzCannot process message %s: %sz{}. {}z%s: %s) r tracktaskrupload_with_retriesr rPwarningFileNotFoundErrorformatERR_MSGstrerrorfilename)rrgrFrSr=rherrs rrazMRSUploader._upload_filessr  " "< 0 0 > > > > >*>M$NN#BGQOOOEEEEE(>>>"//$, CCCNN8S!*========> > > > > > > > > > > > > > > > > > >sMCAC C A1+C1 C >AC?CC  CC CcnK|dd}|j||fdS)NrFr1)r5r put_nowait)rrSrFs r process_hitszMRSUploader.process_hitss; O\BB  %%}g&>?????rN)r,r-)rgrirFrjrSr)rSr)__name__ __module__ __qualname__rsrecompiler7rr&r)r+rDrr MalwareScanrXrr"rarryr(rrrr2s'G2:NOOL444<<<    222::::0 VK #$$++%$+Z_QMMM8>>>>  VK ())@@@*)@@@rr)'__doc__ __future__rr}asyncior contextlibrloggingrtypingrrdefence360agent.apir defence360agent.contracts.configr rN!defence360agent.contracts.licenser "defence360agent.contracts.messagesr !defence360agent.contracts.pluginsr rrdefence360agent.utilsrrimav.malwarelib.utilsrimav.contracts.messagesrr-rj UploaderQueuerzrPrr(rrrs*#"""""  &&&&&&&&******>>>>>>:::::::::::: DCCCCCCC2222228888888%%5 567M 8  H@H@H@H@H@+}H@H@H@H@H@r