提取和记录代码42安全事件的实用程序
c42eventextractor的Python项目详细描述
c42eventextractor-用于提取和记录代码42安全事件和警报的实用程序
c42eventextractor
包提供了帮助检索和记录Code42安全事件和
警报。这是通过公开处理程序来实现的,这些处理程序允许开发人员提供在检索时发生的自定义行为
事件。默认情况下,提取器只会将结果打印到stdout,但这些处理程序可以扩展到
允许开发人员将事件信息记录到他们想要的任何位置或格式。在
要求
- Python 2.7.x或3.5.0+
- Code42服务器6.8.x+
- py42版本1.7.0+
安装
使用pip安装c42eventextractor
:
您可以从PyPI、源代码或发行版安装c42eventextractor
包。在
从PyPI
最简单、最常见的方法是使用pip
:
pip install c42eventextractor
要通过pip
安装以前版本的c42eventextractor,请添加版本号。例如,安装版本
0.2.9,您将输入:
访问PyPI上的project history查看所有发布的版本。在
来源
或者,您可以直接从 source code:
git clone https://github.com/code42/c42eventextractor.git
下载完成后,从根项目目录运行:
python setup.py install
从分布
如果要创建一个.tar
球,以便在其他地方安装,请从项目的根目录运行以下命令:
python setup.py sdist
完成构建后,.tar
球将位于新创建的dist
目录中。要安装它,请输入:
pip install c42eventextractor-[VERSION].tar.gz
用法-代码42安全事件
要获取所有安全事件,请使用FileEventExtractor
:
fromc42eventextractor.extractorsimportFileEventExtractorfromc42eventextractorimportExtractionHandlersimportpy42.sdkcode42_sdk=py42.sdk.from_local_account("https://example.authority.com","admin@example.com","password",)handlers=ExtractionHandlers()# Add implementations for customizing handling response and getting/setting insertion timestamp cursors:defhandle_response(response):passdefrecord_cursor_position(cursor):passdefget_cursor_position():passhandlers.handle_response=handle_responsehandlers.record_cursor_position=record_cursor_positionhandlers.get_cursor_position=get_cursor_positionextractor=FileEventExtractor(code42_sdk,handlers)extractor.extract()# To get all security events in a particular time range, provide an EventTimestamp filter.# Note that if you use `record_cursor_position`, your event timestamp filter may not apply.frompy42.sdk.queries.fileevents.filtersimportEventTimestamptime_filter=EventTimestamp.in_range(1564694804,1564699999)extractor.extract(time_filter)# If your timestamps are in string format, you can convert them by doing:fromdatetimeimportdatetimebegin_date_string="21 June, 2020"end_date_string="22 June, 2020"begin_date=datetime.strptime(begin_date_string,"%d %B, %Y")end_date=datetime.strptime(end_date_string,"%d %B, %Y")begin_timestamp=(begin_date-datetime.utcfromtimestamp(0)).total_seconds()end_timestamp=(end_date-datetime.utcfromtimestamp(0)).total_seconds()time_filter=EventTimestamp.in_range(begin_timestamp,end_timestamp)extractor.extract(time_filter)# You can put filters in an iterable and unpack them (using the `*` operator) in the `extract()`# method. This is a common use case for programs that need to conditionally build up filters.frompy42.sdk.queries.fileevents.filtersimportDeviceUsername,FilePath_NEEDS_DEVICE_USERNAME_FILTER=False_NEEDS_FILE_PATH_FILTER=Truefilters=[]if_NEEDS_DEVICE_USERNAME_FILTER:filters.append(DeviceUsername.eq("test.user@example.com"))if_NEEDS_FILE_PATH_FILTER:filters.append(FilePath.is("path/to/file"))extractor.extract(*filters)
用法-代码42安全警报
获取警报与获取安全事件类似,请使用AlertExtractor和来自
py42.sdk.queries.alerts.filters
模块:
fromc42eventextractor.extractorsimportAlertExtractorfrompy42.sdk.queries.alerts.filtersimportAlertState# set up your sdk and handlers hereextractor=AlertExtractor(code42_sdk,handlers)open_filter=AlertState.eq(AlertState.OPEN)extractor.extract(open_filter)
使用“或”查询
提取器的默认行为是“和”传入进行提取的所有筛选器组。如果你想的话
在多个过滤器之间构造一个“OR”查询,可以在
extractor实例,它将把查询转换为除.or_query_exempt_filters
中的筛选器之外的所有筛选器
列表。默认情况下,此列表包含所有时间戳筛选器类(因为将“或”与时间戳筛选器一起使用将否定任何
其他过滤器类别)。如果需要从“或”组中排除任何其他特定筛选器,并将它们保留在“和”中
作为查询的一部分,您可以附加基本筛选器类(这将从
“或”查询),或传入带值的构造筛选器,以便仅从“或”组中排除该确切筛选器。在
例如“OR”两个过滤器(FileName
和FileSize
),但将整个查询限制为仅暴露事件:
extractor=FileEventExtractor(code42_sdk,handlers)file_name_filter=FileName.eq("document.txt")file_size_filter=FileSize.greater_than(1024*1024*1024)exposure_event_filter=ExposureType.exists()# convert to OR queryextractor.use_or_query=True# make sure the exposure_event_filter is included in the "AND" groupextractor.or_query_exempt_filters.append(exposure_event_filter)extractor.extract(file_name_filter,file_size_filter,exposure_event_filter)
或者查询可以同时使用FileEventExtractor
和AlertExtractor
。在
处理程序
在c42eventextractor.extraction_handlers.ExtractionHandlers
类中提供了一组基本的处理程序。在
默认情况下,将响应数据和任何错误打印到控制台,并将光标位置存储在内存中。在
c42eventextractor
还提供了一些常见的日志记录和格式化实现,您可能会发现这些实现很有用
报告安全数据。在
例如,要以CEF格式提取文件事件并将其提交到syslog服务器,请使用下面的
handle_response
实现:
importjsonimportloggingfromc42eventextractor.logging.handlersimportNoPrioritySysLogHandlerfromc42eventextractor.logging.formattersimportFileEventDictToCEFFormattermy_logger=logging.getLogger("MY_LOGGER")handler=NoPrioritySysLogHandler("examplehostname.com")handler.setFormatter(FileEventDictToCEFFormatter())my_logger.addHandler(handler)my_logger.setLevel(logging.INFO)defhandle_response(response):events=json.loads(response.text)["fileEvents"]foreventinevents:my_logger.info(event)
若要进一步自定义结果/错误的处理,或将光标数据保存到您选择的位置,请重写
提供的处理程序上的方法,或使用与相同的方法签名创建自己的处理程序类
c42eventextractor.extraction_handlers.ExtractionHandlers
。在
光标行为
因为提取器会自动检查提供的处理程序中的游标检查点,如果.extract()
方法
使用用于存储警报和的检查点位置(DateObserved
)的筛选器类调用
InsertionTimestamp
对于文件事件),如果游标检查点已经存在,将引发异常,如
提取器将自动向查询添加自己的时间戳筛选器。在
CEF映射
c42eventextractor包含从JSON字段名到公共事件格式(CEF)的映射。这些格式化程序可用
通过导入c42eventextractor.logging.formatters
模块。创建以CEF格式记录文件事件的记录器
对于文件,请按照以下指南操作:
importloggingfromc42eventextractor.logging.formattersimportFileEventDictToCEFFormatterformatter=FileEventDictToCEFFormatter()handler=logging.FileHandler("output.txt",delay=True,encoding="utf-8")logger=logging.getLogger("extractor_logger")handler.setFormatter(formatter)logger.addHandler(handler)logger.setLevel(logging.INFO)
下表将JSON字段名中的数据映射到CEF以及法医搜索字段名。在
属性映射
下表映射了JSON字段、CEF字段和Forensic Search fields 彼此之间。在
JSON field | CEF field | Forensic Search field |
---|---|---|
actor | suser | Actor |
cloudDriveId | aid | n/a |
createTimestamp | fileCreateTime | File Created Date |
deviceUid | deviceExternalId | n/a |
deviceUserName | suser | Username (Code42) |
domainName | dvchost | Fully Qualified Domain Name |
eventId | externalID | n/a |
eventTimestamp | end | Date Observed |
exposure | reason | Exposure Type |
fileCategory | fileType | File Category |
fileName | fname | Filename |
filePath | filePath | File Path |
fileSize | fsize | File Size |
insertionTimestamp | rt | n/a |
md5Checksum | fileHash | MD5 Hash |
modifyTimestamp | fileModificationTime | File Modified Date |
osHostName | shost | Hostname |
processName | sproc | Executable Name (Browser or Other App) |
processOwner | spriv | Process User (Browser or Other App) |
publicIpAddress | src | IP Address (public) |
removableMediaBusType | cs1 (Code42AEDRemovableMediaBusType) | Device Bus Type (Removable Media) |
removableMediaCapacity | cn1 (Code42AEDRemovableMediaCapacity) | Device Capacity (Removable Media) |
removableMediaName | cs3 (Code42AEDRemovableMediaName) | Device Media Name (Removable Media) |
removableMediaSerialNumber | cs4 | Device Serial Number (Removable Media) |
removableMediaVendor | cs2 (Code42AEDRemovableMediaVendor) | Device Vendor (Removable Media) |
sharedWith | duser | Shared With |
syncDestination | destinationServiceName | Sync Destination (Cloud) |
url | filePath | URL |
userUid | suid | n/a |
windowTitle | requestClientApplication | Tab/Window Title |
tabUrl | request | Tab URL |
emailSender | suser | Sender |
emailRecipients | duser | Recipients |
事件映射
请参阅下表以将渗出事件映射到CEF签名ID。在
^{tb2}$- 项目
标签: