U
    @6^5                     @   s   d dl mZmZ d dlZd dlmZmZmZ dddgddd	dd
dgddddd
dgddddd
dgddddddgddddddgddddZG dd deZ	dS )    )	IPAddress	IPNetworkN)
SpiderFootSpiderFootPluginSpiderFootEventabusezeusdomainlistdomainz>https://zeustracker.abuse.ch/blocklist.php?download=baddomains)idtypechecksurlabusezeusipipnetblockz:https://zeustracker.abuse.ch/blocklist.php?download=badipsabusefeodoipz7https://feodotracker.abuse.ch/downloads/ipblocklist.txtabusesslblipz3https://sslbl.abuse.ch/blacklist/sslipblacklist.csvz{0},.*)r
   r   r   r   regexabuseurlhausz'https://urlhaus.abuse.ch/downloads/csv/z
.*//{0}/.*abuseransomdomz9https://ransomwaretracker.abuse.ch/downloads/RW_DOMBL.txtz^{0}$)zabuse.ch Zeus Tracker (Domain)zabuse.ch Zeus Tracker (IP)zabuse.ch Feodo Tracker (IP)zabuse.ch SSL Blacklist (IP)zabuse.ch URLhaus (Domain)z&abuse.ch Ransomware Blocklist (Domain)c                   @   s   e Zd ZdZdddddddddddddZddddd	d
dddddddZdZe fddZdd Z	dd Z
dd Zdd Zdd Zdd Zd d! ZdS )"sfp_abusechz{abuse.ch:Investigate,Passive:Reputation Systems::Check if a host/domain, IP or netblock is malicious according to abuse.ch.T   )r   r   Zabusefeododomainr   r   r   r   checkaffiliatescheckcohostscacheperiodchecknetblockschecksubnetsz"Enable abuse.ch Zeus domain check?zEnable abuse.ch Zeus IP check?z#Enable abuse.ch Feodo domain check?zEnable abuse.ch Feodo IP check?z&Enable abuse.ch SSL Backlist IP check?zEnable abuse.ch URLhaus check?z%Enable abuse.ch Ransom Domains check?zApply checks to affiliates?z?Apply checks to sites found to be co-hosted on the target's IP?z,Hours to cache list data before re-fetching.z=Report if any malicious IPs are found within owned netblocks?zJCheck if any malicious IPs are found within the same subnet of the target?Nc                 C   s4   || _ |  | _t| D ]}|| | j|< qd S )N)sftempStorageresultsr   keysopts)selfsfcuserOptsopt r&   6/var/www/spiderfoot.crq.systems/modules/sfp_abusech.pysetupe   s    
zsfp_abusech.setupc                 C   s   dddddddgS )NINTERNET_NAME
IP_ADDRESSNETBLOCK_MEMBERAFFILIATE_INTERNET_NAMEAFFILIATE_IPADDRCO_HOSTED_SITENETBLOCK_OWNERr&   r"   r&   r&   r'   watchedEventsq   s       zsfp_abusech.watchedEventsc                 C   s   dddddddgS )NMALICIOUS_IPADDRMALICIOUS_INTERNET_NAMEMALICIOUS_AFFILIATE_IPADDR!MALICIOUS_AFFILIATE_INTERNET_NAMEMALICIOUS_SUBNETMALICIOUS_COHOSTMALICIOUS_NETBLOCKr&   r0   r&   r&   r'   producedEventsy   s       zsfp_abusech.producedEventsc                 C   s   t |dkrB|D ]0}t||tjtjB r| jd|   dS qt |dkr|D ]0}t||tjtjB rR| jd|   dS qR| jd d S )Nr   z#Found to be bad against bad regex: Tz$Found to be good againt good regex: FzNeither good nor bad, unknown.)lenrematch
IGNORECASEDOTALLr   debug)r"   content	goodregexbadregexrxr&   r&   r'   contentMalicious   s    zsfp_abusech.contentMaliciousc                 C   s   | j d| d |  tt D ]}t| d }||kr$t| d dkr$tt| d }| j j||| jd | jd d	}|d
 d kr| j 	d|| d  d S | 
|d
 t| d t| d r$||  S q$d S )Nz	Querying z for maliciousness of r
   r   queryr   _fetchtimeout
_useragenttimeout	useragentr@   Unable to fetch FrA   rB   )r   r?   r   	malchecksr    strfetchUrlformatr!   errorrD   )r"   r
   target
targetTypecheckcidr   resr&   r&   r'   resourceQuery   s    $


zsfp_abusech.resourceQueryc                 C   s  d}|dkr | j || jd }tt D ]t}t| d }||kr,t| d dkr,t }t| d }| j d| | jd	d
|d< |d d kr| j j	|| jd | jd d}|d d kr| j 
d| d  d S | j d| |d  |dkrNt }	dt| krt| d dd}
t|
tj}| j d| d |
  |d dD ].}t||}t|d
krR|	|d
  qRn|d d}	|	D ]}t|dk s|drq| }z@t|t|kr| j |d | d |  |W     S W nB tk
rB } z"| j dt|  W Y qW 5 d }~X Y nX q d S dt| kr|d dD ]P}||ks|dkrj||krj| j |d | d | d  |    S qjq,ztt| d |}tt| d |}|d dD ]b}|dkrt||tjs,t||tjr| j |d | d | d  |  W   S qW q, tk
r } z | j d t|  W Y q,W 5 d }~X Y q,X q,d S )!N r	   _internettldsr
   r   r   r   sfmal_r   r   r@   rF   rG   rH   rK   Fr   r   z{0}z(\d+\.\d+\.\d+\.\d+)zNew regex for z: 
   #z found within netblock/subnet z in zError encountered parsing: /z
 found in z list.zError encountered parsing 2: )r   
hostDomainr!   r   rL   r    dictcacheGetgetrN   rP   cachePutreplacer;   compiler=   r?   splitfindallr:   append
startswithstripr   r   	ExceptionrM   rO   r<   BaseException)r"   r
   rQ   rR   	targetDomrS   rT   datar   iplistrC   patlinegrpr   erxDomrxTgtr&   r&   r'   resourceList   s     
   zsfp_abusech.resourceListc                 C   s   t t D ]}t| d }||kr|t| d kr| jd| d | d |  t| d dkrv| |||  S t| d dkr| |||  S qd S )	Nr
   r   zChecking maliciousness of z (z) with: r   rE   r   )r   rL   r    r   r?   rV   ru   )r"   
resourceIditemTyperQ   rS   rT   r&   r&   r'   
lookupItem   s    zsfp_abusech.lookupItemc                 C   s  |j }|j}|j}| jd| d |  || jkrL| jd| d  d S d| j|< |dkrp| jddspd S |d	kr| jd
dsd S |dkr| jddsd S |dkr| jddsd S tt	
 D ]}t	| d }| j| r|dkrd}|dkrd}nd}|dkrd}d}|dkrRd}|dkr6d}|dkrDd}|dkrRd}|dkrdd}d }|dkrvd}d!}| |||}	|  r d S |	d k	r|d" | d# d$ |	 d% }
t||
| j|}| | qd S )&NzReceived event, z, from z	Skipping z, already checked.Tr.   r   Fr-   r   r/   r   r+   r   r
   )r*   r-   r   r*   r2   r4   )BGP_AS_OWNERBGP_AS_MEMBERasnMALICIOUS_ASN)r)   r.   r,   r	   r)   r3   r,   r5   r7   r   r8   r6   z [z]
z<SFURL>z</SFURL>)	eventTypemodulerm   r   r?   r   r!   ra   r   rL   r    rx   checkForStopr   __name__notifyListeners)r"   event	eventNamesrcModuleName	eventDatarS   rT   typeIdevtTyper   textevtr&   r&   r'   handleEvent   sf    












zsfp_abusech.handleEvent)r   
__module____qualname____doc__r!   optdescsr   r_   r(   r1   r9   rD   rV   ru   rx   r   r&   r&   r&   r'   r   <   sH   Mr   )
netaddrr   r   r;   sflibr   r   r   rL   r   r&   r&   r&   r'   <module>   sJ   *