3
@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   s8   || _ | j | _x"t|j D ]}|| | j|< qW 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&   )r"   r&   r&   r'   producedEventsy   s    zsfp_abusech.producedEventsc             C   s   t |dkrDx6|D ].}tj||tjtjB r| jjd|  dS qW t |dkrx6|D ].}tj||tjtjB rV| jjd|  dS qVW | j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 jd| d |  xttj D ]}t| d }||kr&t| d dkr&tt| d }| j j|j|| jd | jd d	}|d
 d kr| j j	d|j| d d S | j
|d
 t| d t| d r&|j|S q&W d S )Nz	Querying z for maliciousness of r
   r   queryr   _fetchtimeout
_useragent)timeout	useragentr?   zUnable to fetch Fr@   rA   )r   r>   r   	malchecksr    strfetchUrlformatr!   errorrC   )r"   r
   target
targetTypecheckcidr   resr&   r&   r'   resourceQuery   s    $

zsfp_abusech.resourceQueryc             C   s  d}|dkr | j j|| jd }xjttj D ]X}t| d }||koXt| d dkr0t }t| d }| j jd| | jjd	d
|d< |d d kr| j j	|| jd | jd d}|d d kr| j j
d| d d S | j jd| |d  |dkrFt }	dt| krt| d jdd}
tj|
tj}| j jd| d |
  xP|d jdD ].}tj||}t|d
krV|	j|d
  qVW n|d jd}	x|	D ]}t|dk s|jdrq|j }y6t|t|kr| j j|d | d |  |S W n< tk
r: } z| j jdt|  wW Y d d }~X nX qW d S dt| krxZ|d jdD ]H}||ks|dkrd||krd| j j|d | d | d  |S qdW q0ytt| d j|}tt| d j|}xj|d jdD ]X}|dkrtj||tjs"tj||tjr| j j|d | d | d  |S qW W q0 tk
r } z| j jd t|  w0W Y d d }~X q0X q0W d S )!N r	   _internettldsr
   r   r   r   sfmal_r   r   r?   rE   rF   )rG   rH   zUnable to fetch 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   rI   r    dictcacheGetgetrK   rM   cachePutreplacer:   compiler<   r>   splitfindallr9   append
startswithstripr   r   	ExceptionrJ   rL   r;   BaseException)r"   r
   rN   rO   	targetDomrP   rQ   datar   iplistrB   patlinegrpr   erxDomrxTgtr&   r&   r'   resourceList   sr     

  zsfp_abusech.resourceListc             C   s   xt tj D ]}t| d }||kr|t| d kr| jjd| d | d |  t| d dkrt| j|||S t| d dkr| j|||S qW d S )	Nr
   r   zChecking maliciousness of z (z) with: r   rD   r   )r   rI   r    r   r>   rS   rr   )r"   
resourceIditemTyperN   rP   rQ   r&   r&   r'   
lookupItem   s    zsfp_abusech.lookupItemc             C   s  |j }|j}|j}| jjd| d |  || jkrL| jjd| d  d S d| j|< |dkrr| jjdd rrd S |d	kr| jjd
d rd S |dkr| jjdd rd S |dkr| jjdd rd S xtt	j
 D ]}t	| d }| j| r|d%krd}|dkrd}nd}|d&kr&d}d}|d'kr^d}|dkrBd}|dkrPd}|dkr^d}|dkrpd}d}|dkrd}d }| j|||}	| j rd S |	d k	r|d! | d" d# |	 d$ }
t||
| j|}| j| qW d S )(NzReceived event, z, from z	Skipping z, already checked.Tr.   r   Fr-   r   r/   r   r+   r   r
   r*   r   r1   r3   BGP_AS_OWNERBGP_AS_MEMBERasnMALICIOUS_ASNr)   r,   r	   r2   r4   r6   r   r7   r5   z [z]
z<SFURL>z</SFURL>)r*   r-   )rv   rw   )r)   r.   r,   )	eventTypemodulerj   r   r>   r   r!   r^   r   rI   r    ru   checkForStopr   __name__notifyListeners)r"   event	eventNamesrcModuleName	eventDatarP   rQ   typeIdevtTyper   textevtr&   r&   r'   handleEvent   sf    











zsfp_abusech.handleEvent)r}   
__module____qualname____doc__r!   optdescsr   r\   r(   r0   r8   rC   rS   rr   ru   r   r&   r&   r&   r'   r   <   sD   Mr   )
netaddrr   r   r:   sflibr   r   r   rI   r   r&   r&   r&   r'   <module>   s<   