3
@6^)                 @   sZ   d dl mZmZ d dlZd dlmZmZmZ ddddgdd	gg d
iZG dd deZ	dS )    )	IPAddress	IPNetworkN)
SpiderFootSpiderFootPluginSpiderFootEventzInternet Storm Center_iscqueryipzhttps://isc.sans.edu/api/ip/{0}z.*<attacks>\d+</attacks>.*)idtypechecksurlbadregex	goodregexc               @   sl   e Zd ZdZdddZddi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_isczpInternet Storm Center:Investigate,Passive:Reputation Systems::Check if an IP is malicious according to SANS ISC.T)r   checkaffiliatesr   zApply checks to affiliates?Nc             C   s8   || _ | j | _x"t|j D ]}|| | j|< qW d S )N)sftempStorageresultslistkeysopts)selfsfcuserOptsopt r   2/var/www/spiderfoot.crq.systems/modules/sfp_isc.pysetup2   s    
zsfp_isc.setupc             C   s   ddgS )N
IP_ADDRESSAFFILIATE_IPADDRr   )r   r   r   r   watchedEvents>   s    zsfp_isc.watchedEventsc             C   s   ddgS )NMALICIOUS_IPADDRMALICIOUS_AFFILIATE_IPADDRr   )r   r   r   r   producedEventsD   s    zsfp_isc.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   contentr   r   rxr   r   r   contentMaliciousH   s    

zsfp_isc.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|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   r   r      
_useragent)timeout	useragentr+   zUnable to fetch Fr   r   )r   r*   r   	malchecksr   strfetchUrlformatr   errorr-   )r   r
   target
targetTypecheckcidr   resr   r   r   resourceQuery\   s    

zsfp_isc.resourceQueryc             C   s  d}|dkr | j j|| jd }xdttj D ]R}t| d }||koXt| d dkr0t }t| d }| j jd| | jjd	d
|d< |d d kr| j j	|d| jd d}|d d kr| j j
d| d d S | j jd| |d  |dkr@t }	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rP|	j|d
  qPW 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
r4 } 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r^||kr^| j j|d | d | d  |S q^W 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 domain_internettldsr
   r   r   r   sfmal_cacheperiodr   r+   r.   r/   )r0   r1   zUnable to fetch Fnetblockregexz{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   r2   r   dictcacheGetgetr4   r6   cachePutreplacer&   compiler(   r*   splitfindallr%   append
startswithstripr   r   	Exceptionr3   r5   r'   BaseException)r   r
   r7   r8   	targetDomr9   r:   datar   iplistr,   patlinegrpr	   erxDomrxTgtr   r   r   resourceListn   sr     

  zsfp_isc.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   r   r   )r   r2   r   r   r*   r<   r_   )r   
resourceIditemTyper7   r9   r:   r   r   r   
lookupItem   s    zsfp_isc.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 xtt	j
 D ]}t	| d }| j| r|dkrd}|dkrd}nd}|dkrd}d}|d krd}|dkr d}|dkrd}|dkrd}| j|||}	| j r8d S |	d k	r|d | d d |	 d }
t||
| j|}| j| qW d S )!NzReceived event, z, from z	Skipping z, already checked.TCO_HOSTED_SITEcheckcohostsFr    r   r
   r   r	   r"   r#   BGP_AS_OWNERBGP_AS_MEMBERasnMALICIOUS_ASNINTERNET_NAMEAFFILIATE_INTERNET_NAMEr>   MALICIOUS_INTERNET_NAME!MALICIOUS_AFFILIATE_INTERNET_NAMEMALICIOUS_COHOSTz [z]
z<SFURL>z</SFURL>)r   r    )re   rf   )ri   rc   rj   )	eventTypemodulerW   r   r*   r   r   rK   r   r2   r   rb   checkForStopr   __name__notifyListeners)r   event	eventNamesrcModuleName	eventDatar9   r:   typeIdevtTyper   textevtr   r   r   handleEvent   sR    






zsfp_isc.handleEvent)rq   
__module____qualname____doc__r   optdescsr   rI   r   r!   r$   r-   r<   r_   rb   r{   r   r   r   r   r      s   Mr   )
netaddrr   r   r&   sflibr   r   r   r2   r   r   r   r   r   <module>   s   
