File manager - Edit - /opt/imunify360/venv/lib/python3.11/site-packages/imav/malwarelib/plugins/__pycache__/mrs_uploader.cpython-311.opt-1.pyc
Back
� ,|_j3 � � � d Z ddlmZ ddlZddlZddlZddlmZ ddlmZ ddl m Z ddlmZ ddlmZ dd lmZmZ dd lmZmZmZ ddlmZmZ ddlmZ dd lmZ ddlmZ ee � � Z!dZ" G d� dee� � Z#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 <https://www.gnu.org/licenses/>. Copyright © 2019 Cloud Linux Software Inc. This software is also available under ImunifyAV commercial license, see <https://www.imunify360.com/legal/eula> � )�annotationsN)�CancelledError)� getLogger)� inactivity)�Malware)�LicenseError)�GeneralMetrics�MessageType)�MessageSink� MessageSource�expect)�create_task_and_log_exceptions�safe_cancel_task)�MalwareMRSUpload)�malware_response)�PersistentMRSQueuei, c �� � e Zd ZdZ ej d� � Zd� Zd� Zd� Z d� Z d� Zd� Zd � Z dd�Z eej � � d � � � Zd� Zd� Zdd�Zdd�Z eej � � dd�� � ZdS )�MRSUploaderzFailed to submit a filez-(?:suspicious\..+|[CS]MW-SUS-.+|SMW-HEUR-ELF)c � � t � � | _ t j � � | _ t j � � | _ d S �N)r �_queue�asyncio�Event� _new_items� _shutdown��selfs �Y/opt/imunify360/venv/lib/python3.11/site-packages/imav/malwarelib/plugins/mrs_uploader.py�__init__zMRSUploader.__init__8 s- � �(�*�*���!�-�/�/��� �������� c � � K � || _ || _ | j � � � | j � d�� � | j � � � r| j � � � t || j � � | _ | � � � � d {V �� t || j � � | _ d S )Nr ��older_than_seconds)�_sink�_loopr �cleanup_exhausted�requeue_stale_processing� pending_countr �setr �upload�_upload_task�_maybe_emit_stale_metrics�_report_metrics� _metrics_task)r �loop�sinks r � create_sourcezMRSUploader.create_source= s� � � � ��� ��� ���%�%�'�'�'���,�,��,�B�B�B��;�$�$�&�&� "��O���!�!�!�:�4���M�M����,�,�.�.�.�.�.�.�.�.�.�;��$�&� � ����r c � � K � d S r � )r r/ s r �create_sinkzMRSUploader.create_sinkJ s � � � ��r c � � K � | j � � � | j � � � t | j � � � d {V �� | � � � � d {V �� t | j � � � d {V �� d S r )r r) r r r+ � _emit_metricsr. r s r �shutdownzMRSUploader.shutdownM s� � � � ����������������t�0�1�1�1�1�1�1�1�1�1�� � �"�"�"�"�"�"�"�"�"��t�1�2�2�2�2�2�2�2�2�2�2�2r c � � K � | j � � � }|�t j � � |z t k r| � � � � d{V �� dS dS )z>Emit metrics on startup if last report is older than interval.N)r �get_last_metrics_report_time�time�METRICS_REPORT_INTERVALr6 )r �last_reports r r, z%MRSUploader._maybe_emit_stale_metricsT si � � � ��k�>�>�@�@�����I�K�K�+�%�(?�?�?��$�$�&�&�&�&�&�&�&�&�&�&�&� @�?r c � �v K � | j � � � s� t j | j � � � t �� � � d{V �� n# t j $ r Y nw xY w| j � � � s| � � � � d{V �� | j � � � ��dS dS )z3Periodically emit queue metrics as GENERAL_METRICS.)�timeoutN)r �is_setr �wait_for�waitr; �TimeoutErrorr6 r s r r- zMRSUploader._report_metrics\ s� � � � ��.�'�'�)�)� +� ��&��N�'�'�)�)�3�� � � � � � � � � � �� �'� � � ��� �����>�(�(�*�*� +��(�(�*�*�*�*�*�*�*�*�*� �.�'�'�)�)� +� +� +� +� +s �8A �A(�'A(c � � K � | j � � � }| j � � � }i |�|�}t |� � � � � sdS d� |� � � D � � }| j � t |� � � � � d{V �� | j � t j � � � � dS # t $ r t � d� � Y dS w xY w)z#Collect and emit all queue metrics.Nc � � g | ] \ }}||d ���S ))�name�valuer3 )�.0rE rF s r � <listcomp>z-MRSUploader._emit_metrics.<locals>.<listcomp>q s4 � � � � ��D�%� ��.�.�� � r z Failed to emit MRS queue metrics)r �get_counters� get_gauges�any�values�itemsr$ �process_messager �set_last_metrics_report_timer: � Exception�logger� exception)r �counters�gauges�metrics�payloads r r6 zMRSUploader._emit_metricsi s � � � � A��{�/�/�1�1�H��[�+�+�-�-�F�,��,�V�,�G��w�~�~�'�'�(�(� ���� �#*�=�=�?�?�� � �G� �*�,�,�^�G�-D�-D�E�E�E�E�E�E�E�E�E��K�4�4�T�Y�[�[�A�A�A�A�A��� A� A� A����?�@�@�@�@�@�@� A���s �AC �A6C �$C?�>C?�return�tuplec �� � g }g }g }|� � � D ]�\ }}d}d}d} |d D ]_} || � dd� � z }|t | d o| j � | d � � � � z }| | d z } �`t j ||d � � }|r|� |� � ��|r|� |� � ��| r|� |� � ��|||fS )NF�hits�extended_suspicious� suspicious�matches�hash)rM �get�bool�SUSP_PATTERN�matchr �HitInfo�append)r �results� maliciousr\ r[ �file�data�is_extended_suspicious� is_suspicious�is_malicious�hit�hit_infos r �_separate_hits_by_typez"MRSUploader._separate_hits_by_typez s; � �� �� � ��!�-�-�/�/� +� +�J�D�$�%*�"�!�M� �L��F�|� 6� 6��&�#�'�'�2G��*O�*O�O�&�����%� @��)�/�/��I��?�?�"� "� � � �C��$5� 5�5���'�/��d�6�l�C�C�H�%� +�#�*�*�8�4�4�4�4�� +��!�!�(�+�+�+�+�� +�� � ��*�*�*���*�&9�9�9r c � �~ K � |d }|�d S t j st � d� � d S | � |� � \ }}}|r/| j � t |d�� � � � � d {V �� |r/| j � t |d�� � � � � d {V �� |r/| j � t |d�� � � � � d {V �� |d � d� � }|r=d � |D � � }| j � t |d �� � � � � d {V �� d S d S )Nre z"Uploading files to MRS is disabledrf )rZ � upload_reasonr\ zextended-suspicious�summary�errorsc �P � g | ]#}t j |d |d � � ��$S )rg r^ )r rc )rG rl s r rH z,MRSUploader.process_scan.<locals>.<listcomp>� s= � � � � �� !�(��V��c�&�k�B�B�� � r � scan_error) �Config� SEND_FILESrQ �inforn r$ rN r r_ )r �messagere �malicious_hits�suspicious_hits�extended_suspicious_hitsrr � error_hitss r �process_scanzMRSUploader.process_scan� s � � � ��)�$���?��F�� � ��K�K�<�=�=�=��F� �'�'��0�0� ���$�� ��*�,�,� �'�{�� � �� � � � � � � � � � ��*�,�,� �(��� � �� � � � � � � � � $� ��*�,�,� �1�"7�� � �� � � � � � � � � ��#�'�'��1�1��� �� �!�� � �J� �*�,�,� �j��M�M�M�� � � � � � � � � � � � r c � �T K � | j � � � �s| j � � � � d {V �� | j � � � | � � � � d {V �� n�# t $ r � t $ r� t � d� � | j � � � sN| j � d�� � | j � � � t j d� � � d {V �� Y nw xY w| j � � � �� d S d S )Nz'Unexpected error in MRS upload consumerr r"