3
@6^+                 @   sX   d dl mZmZ d dlZd dlmZmZmZ dddddd	gd
diZG dd deZ	dS )    )	IPAddress	IPNetworkN)
SpiderFootSpiderFootPluginSpiderFootEventzCustom Threat Data_customfeedipnetblockasndomainz^{0}$)idchecksregexc               @   st   e Zd ZdZddddddZdddd	d
Z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S )sfp_customfeedzCustom Threat Feed:Investigate,Passive:Reputation Systems::Check if a host/domain, netblock, ASN or IP is malicious according to your custom feed.T r   )r   checkaffiliatescheckcohostsurlcacheperiodzThe URL where the feed can be found. Exact matching is performed so the format must be a single line per host, ASN, domain, IP or netblock.zApply checks to affiliates?z?Apply checks to sites found to be co-hosted on the target's IP?zIMaximum age of data in hours before re-downloading. 0 to always download.)r   r   r   r   NFc             C   s>   || _ | j | _d| _x"t|j D ]}|| | j|< q$W d S )NF)sftempStorageresults
errorStatelistkeysopts)selfsfcuserOptsopt r    9/var/www/spiderfoot.crq.systems/modules/sfp_customfeed.pysetup5   s
    
zsfp_customfeed.setupc             C   s   dddddgS )NINTERNET_NAME
IP_ADDRESSAFFILIATE_INTERNET_NAMEAFFILIATE_IPADDRCO_HOSTED_SITEr    )r   r    r    r!   watchedEventsB   s    zsfp_customfeed.watchedEventsc             C   s   dddddgS )NMALICIOUS_IPADDRMALICIOUS_INTERNET_NAMEMALICIOUS_AFFILIATE_IPADDR!MALICIOUS_AFFILIATE_INTERNET_NAMEMALICIOUS_COHOSTr    )r   r    r    r!   producedEventsI   s    zsfp_customfeed.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!   contentMaliciousO   s    

zsfp_customfeed.contentMaliciousc             C   s  d}|dkr | j j|| jd }xXttj D ]F}t| d }| jd }||kr0t }| 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r4t }	dt| krxt| d jdd}
tj|
tj}| j jd| d |
  xP|d	 jdD ].}tj||}t|dkrD|	j|d  qDW 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st|dkrR||krR| j j|d | d | d  |S qRW q0ytt| d j|}tt| d j|}xj|d	 jdD ]X}|dkrtj||tjstj||tjr| j j|d | d | d  |S qW W q0 tk
rv } z| j jdt|  w0W Y d d }~X q0X q0W d S )Nr   r   _internettldsr   r   sfmal_r   r   r5   _fetchtimeout
_useragent)timeout	useragentz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   	malchecksr   dictcacheGetgetfetchUrlerrorcachePutreplacer0   compiler2   r4   splitfindallr/   append
startswithstripr   r   	Exceptionstrformatr1   BaseException)r   r   target
targetType	targetDomcheckcidr   dataiplistr8   patlinegrpr   erxDomrxTgtr    r    r!   resourceListc   sr    
 

  zsfp_customfeed.resourceListc             C   sl   xft tj D ]V}t| d }||kr|t| d kr| jjd| d | d |  | j|||S qW d S )Nr   r   zChecking maliciousness of z (z) with: )r   rE   r   r   r4   rd   )r   
resourceIditemTyperW   rZ   r[   r    r    r!   
lookupItem   s    zsfp_customfeed.lookupItemc             C   s  |j }|j}|j}| jjd| d |  | jr4d S | jd dkrZ| jjdd d| _d S || jkr|| jjd| d	  d S d| j|< |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 |dkr| jj	dd rd S xt
tj D ]
}t| d }| j| r|d(krFd}|dkrBd}nd}|d)krXd}d}|d*krd}|dkrtd}|dkrd}|d
krd }|dkrd!}d"}|dkrd!}d#}| j|||}	| j rd S |	d k	r|d$ | d% d& |	 d' }
t||
| j|}| j| qW d S )+NzReceived event, z, from r   r   z:You enabled sfp_customfeed but defined no custom feed URL!FTz	Skipping z, already checked.r'   r   r&   r   NETBLOCK_OWNERchecknetblocksNETBLOCK_MEMBERchecksubnetsr   r$   r   r)   r+   BGP_AS_OWNERBGP_AS_MEMBERr
   MALICIOUS_ASNr#   r%   r   r*   r,   r-   r	   MALICIOUS_NETBLOCKMALICIOUS_SUBNETz [z]
z<SFURL>z</SFURL>)r$   r&   )rl   rm   )r#   r'   r%   )	eventTypemoduler\   r   r4   r   r   rJ   r   rH   r   rE   r   rg   checkForStopr   __name__notifyListeners)r   event	eventNamesrcModuleName	eventDatarZ   r[   typeIdevtTyper   textevtr    r    r!   handleEvent   sr    











zsfp_customfeed.handleEvent)rt   
__module____qualname____doc__r   optdescsr   r   rF   r"   r(   r.   r9   rd   rg   r~   r    r    r    r!   r      s&   Mr   )
netaddrr   r   r0   sflibr   r   r   rE   r   r    r    r    r!   <module>   s   

