提取和记录代码42安全事件的实用程序

c42eventextractor的Python项目详细描述


c42eventextractor-用于提取和记录代码42安全事件和警报的实用程序

Build statusversionsCode style: black

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,您将输入:

^{pr2}$

访问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”两个过滤器(FileNameFileSize),但将整个查询限制为仅暴露事件:

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)

或者查询可以同时使用FileEventExtractorAlertExtractor。在

处理程序

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 fieldCEF fieldForensic Search field
actorsuserActor
cloudDriveIdaidn/a
createTimestampfileCreateTimeFile Created Date
deviceUiddeviceExternalIdn/a
deviceUserNamesuserUsername (Code42)
domainNamedvchostFully Qualified Domain Name
eventIdexternalIDn/a
eventTimestampendDate Observed
exposurereasonExposure Type
fileCategoryfileTypeFile Category
fileNamefnameFilename
filePathfilePathFile Path
fileSizefsizeFile Size
insertionTimestamprtn/a
md5ChecksumfileHashMD5 Hash
modifyTimestampfileModificationTimeFile Modified Date
osHostNameshostHostname
processNamesprocExecutable Name (Browser or Other App)
processOwnersprivProcess User (Browser or Other App)
publicIpAddresssrcIP Address (public)
removableMediaBusTypecs1 (Code42AEDRemovableMediaBusType)Device Bus Type (Removable Media)
removableMediaCapacitycn1 (Code42AEDRemovableMediaCapacity)Device Capacity (Removable Media)
removableMediaNamecs3 (Code42AEDRemovableMediaName)Device Media Name (Removable Media)
removableMediaSerialNumbercs4Device Serial Number (Removable Media)
removableMediaVendorcs2 (Code42AEDRemovableMediaVendor)Device Vendor (Removable Media)
sharedWithduserShared With
syncDestinationdestinationServiceNameSync Destination (Cloud)
urlfilePathURL
userUidsuidn/a
windowTitlerequestClientApplicationTab/Window Title
tabUrlrequestTab URL
emailSendersuserSender
emailRecipientsduserRecipients

事件映射

请参阅下表以将渗出事件映射到CEF签名ID。在

^{tb2}$

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么这个循环打印1020之间的所有值?我想让它打印出可以被5整除的值   java如何在JTable中集中单元格   java无法通过一个键从hashmap获取对象,该键具有相同的hashcode,并且两个键等于()   不兼容的类型?JAVA   将字符串开头与空格匹配时java replaceAll的正则表达式混淆结果   java为非java应用程序创建jar文件。类文件   java无法从另一个普通Http Servlet访问筛选器Servlet的会话属性   java Ejb,第二个方法中的错误回滚第一个方法   swing java操作侦听器在菜单上,而不是在菜单项上   分析文件时出错:分析文件时出错:无法在Java的XSSF中分析excel文件   java将实体注入到ViewScope Bean中   java如何关闭终端而不终止正在运行的jar文件进程   爪哇力下传   java不能隐式地将[T]强制转换为AT,其中[T]扩展为AT   java Spring项目在jsp页面中显示mysql表数据   java在创建新实例SQLITE时出错