一个python库,用于帮助执行一些常见的威胁搜索数据分析操作
huntlib的Python项目详细描述
#huntlib
一个python库,用于帮助执行一些常见的威胁搜索数据分析操作。[目标公司的CFC开源松弛](https://cfc-slack-inv.herokuapp.com/badge.svg?colora=155799&colorb=159953)(https://cfc-slack-inv.herokuapp.com/)
\
"huntlib"模块提供两个主要的对象类和一些方便的函数。
**elasticdf**:搜索elasticdf并返回结果作为pandas数据帧
**splunkdf**:搜索splunk并返回结果作为pandas数据帧
**entropy()**/**entropy_per_byte()**:计算shannon entropy
**promptcreds()**:提示在终端中输入登录凭据或者在jupyter笔记本中。
**edit_distance()**:计算两个字符串之间的"不同"程度
huntlib.elasticdf
elasticdf()类搜索elasticdf并将结果作为pandas数据帧返回。这使得使用标准数据分析技术处理搜索结果更加容易。
没有身份验证
`` python
e=elasticdf(
url="http://localhost:9200"
)
````
username="myuser",
password="mypass"
)
````
从前一天的索引或索引模式获取搜索结果days=1
)
```
这将导致每个结构都有一个单独的列,其中包含描述结构的json字符串。
`` python
df=e.search_df(
lucene="item:5282 and color:red",
index="myindex-*",
days=1,
normalize=false
)
```
一个更复杂的示例,演示如何设置弹性文档类型,使用python样式的datetime对象将搜索限制到特定的时间段,以及用户定义的用于进行时间比较的字段。结果大小将限制为不超过1500个条目。
`` python
df=e.搜索df(
lucene="item:5285 and color:red",
index="myindex-*",
doctype="doc",date\u field="mydate",
开始时间=datetime.now()-timedelta(days=8),
结束时间=datetime.now()-timedelta(days=6),
限制=1500
`````
搜索请求在语法上是正确的,但在其他方面是无效的。例如,如果您请求返回的结果比服务器
能够提供的结果多。它们将在
服务器在登录期间拒绝凭据的事件中引发"authenticationerrorsearchexception"。对于其他情况,它们还可以引发一个
"未知的原型异常",在这种情况下,异常
消息将包含Elastic返回的原始错误消息,因此您可以找出错误所在。
huntlib.splunk.splunkdf
这使得使用标准数据分析技术处理搜索结果更加容易。
这是否是ssl/tls取决于服务器,而您并没有真正的发言权。
在所有时间获取所有搜索结果
`` python
df=s.search_df(
spl="search index=win_events eventcode=4688"
)
````
仅获取特定字段,仍然贯穿始终
`` python
df=s.search_df(
spl="search index=win_events eventcode=4688 table computername_time new_process_name account_name creator_process_id new_process_command_line"
)
````
有时间限制的搜索,提前2天到现在为止
`` python
df=s.search\u df(
spl="search index=win\u events eventcode=4688",
days=2
)
```
结束时间=datetime.now()
)
```
>使用splunk符号的有时间限制的搜索
```python
df=s.search df(
spl="search index=win_events eventcode=4688",
start_time=-2d@d",
结束时间="@d"
)
```
指定为"limit"还受服务器端max
值的限制。默认情况下,这是50000,可以通过在splunk服务器上编辑limits.conf来更改。如果使用limit参数,则收到的搜索结果数
将是以下值中的较小值:1)可用
结果的实际数目,2)使用"limit"请求的数目,3)服务器端
最大结果大小。如果您完全忽略限制,您将得到**true**
可用的搜索结果数,而不受其他限制,尽管
您的搜索可能需要更长的时间才能完成。*
`splunkdf`将在初始化期间引发'authenticationerrorsearchexception',
如果服务器拒绝提供的凭据。
两者都接受单个字符串作为参数。‘entropy()’函数计算给定字符串的shannon熵,而‘entropy_per_byte()’则试图通过返回shannon熵除以字符串长度来对不同长度的字符串进行规范化。这两个返回值都是"float"。
``python
>;>可能嵌入的数据越多。
` huntlib`提供了'promptcreds()`函数来帮助解决这个问题。这个函数在终端和从jupyter笔记本中调用时都能很好地工作。password)=promptcreds()
```
>您可以通过传递参数来更改一个或两个用户名/密码提示:
``python
(用户名,密码)=promptcreds(uprompt="lan id:",
pprompt="lan pass:")
```
字符串相似性
字符串相似性可以用"编辑距离"来表示,也可以用将第一个字符串转换为第二个字符串所需的单个字符编辑次数来表示。例如,当您希望找到两个非常相似但不完全相同的字符串时(例如,在搜索r[进程模拟](http://detect respond.blogspot.com/2016/11/hunting for malware critical process.html)。
有许多不同的方法可以计算相似性。` huntlib`为此提供了'edit_distance()`函数,支持多种算法:
*[levenshtein距离](https://en.wikipedia.org/wiki/levenshtein距离)
*[damerau levenshtein距离](https://en.wikipedia.org/wiki/damerau%e2%80%93levenshtein距离)
*[hamming距离](https://en.wikipedia.org/wiki/hamming_distance)
*[jaro距离](https://en.wikipedia.org/wiki/jaro%e2%80%93winkler_distance)
*[jaro winkler距离](https://en.wikipedia.org/wiki/jaro%e2%80%93winkler_distance)
下面是一个示例:
``python
>;huntlib.edit_distance('svchost','scvhost')
1
````
有效方法是"levenshtein"、"damerau levenshtein"、"hamming"、"jaro"和"jaro winkler"。默认值为"damerau levenshtein"。
``python
>;>huntlib.edit_distance('svchost','scvhost',method='levenshtein')
2
````
一个python库,用于帮助执行一些常见的威胁搜索数据分析操作。[目标公司的CFC开源松弛](https://cfc-slack-inv.herokuapp.com/badge.svg?colora=155799&colorb=159953)(https://cfc-slack-inv.herokuapp.com/)
\
"huntlib"模块提供两个主要的对象类和一些方便的函数。
**elasticdf**:搜索elasticdf并返回结果作为pandas数据帧
**splunkdf**:搜索splunk并返回结果作为pandas数据帧
**entropy()**/**entropy_per_byte()**:计算shannon entropy
**promptcreds()**:提示在终端中输入登录凭据或者在jupyter笔记本中。
**edit_distance()**:计算两个字符串之间的"不同"程度
huntlib.elasticdf
elasticdf()类搜索elasticdf并将结果作为pandas数据帧返回。这使得使用标准数据分析技术处理搜索结果更加容易。
没有身份验证
`` python
e=elasticdf(
url="http://localhost:9200"
)
````
username="myuser",
password="mypass"
)
````
从前一天的索引或索引模式获取搜索结果days=1
)
```
这将导致每个结构都有一个单独的列,其中包含描述结构的json字符串。
`` python
df=e.search_df(
lucene="item:5282 and color:red",
index="myindex-*",
days=1,
normalize=false
)
```
一个更复杂的示例,演示如何设置弹性文档类型,使用python样式的datetime对象将搜索限制到特定的时间段,以及用户定义的用于进行时间比较的字段。结果大小将限制为不超过1500个条目。
`` python
df=e.搜索df(
lucene="item:5285 and color:red",
index="myindex-*",
doctype="doc",date\u field="mydate",
开始时间=datetime.now()-timedelta(days=8),
结束时间=datetime.now()-timedelta(days=6),
限制=1500
`````
搜索请求在语法上是正确的,但在其他方面是无效的。例如,如果您请求返回的结果比服务器
能够提供的结果多。它们将在
服务器在登录期间拒绝凭据的事件中引发"authenticationerrorsearchexception"。对于其他情况,它们还可以引发一个
"未知的原型异常",在这种情况下,异常
消息将包含Elastic返回的原始错误消息,因此您可以找出错误所在。
huntlib.splunk.splunkdf
这使得使用标准数据分析技术处理搜索结果更加容易。
这是否是ssl/tls取决于服务器,而您并没有真正的发言权。
在所有时间获取所有搜索结果
`` python
df=s.search_df(
spl="search index=win_events eventcode=4688"
)
````
仅获取特定字段,仍然贯穿始终
`` python
df=s.search_df(
spl="search index=win_events eventcode=4688 table computername_time new_process_name account_name creator_process_id new_process_command_line"
)
````
有时间限制的搜索,提前2天到现在为止
`` python
df=s.search\u df(
spl="search index=win\u events eventcode=4688",
days=2
)
```
结束时间=datetime.now()
)
```
>使用splunk符号的有时间限制的搜索
```python
df=s.search df(
spl="search index=win_events eventcode=4688",
start_time=-2d@d",
结束时间="@d"
)
```
指定为"limit"还受服务器端max
值的限制。默认情况下,这是50000,可以通过在splunk服务器上编辑limits.conf来更改。如果使用limit参数,则收到的搜索结果数
将是以下值中的较小值:1)可用
结果的实际数目,2)使用"limit"请求的数目,3)服务器端
最大结果大小。如果您完全忽略限制,您将得到**true**
可用的搜索结果数,而不受其他限制,尽管
您的搜索可能需要更长的时间才能完成。*
`splunkdf`将在初始化期间引发'authenticationerrorsearchexception',
如果服务器拒绝提供的凭据。
两者都接受单个字符串作为参数。‘entropy()’函数计算给定字符串的shannon熵,而‘entropy_per_byte()’则试图通过返回shannon熵除以字符串长度来对不同长度的字符串进行规范化。这两个返回值都是"float"。
``python
>;>可能嵌入的数据越多。
` huntlib`提供了'promptcreds()`函数来帮助解决这个问题。这个函数在终端和从jupyter笔记本中调用时都能很好地工作。password)=promptcreds()
```
>您可以通过传递参数来更改一个或两个用户名/密码提示:
``python
(用户名,密码)=promptcreds(uprompt="lan id:",
pprompt="lan pass:")
```
字符串相似性
字符串相似性可以用"编辑距离"来表示,也可以用将第一个字符串转换为第二个字符串所需的单个字符编辑次数来表示。例如,当您希望找到两个非常相似但不完全相同的字符串时(例如,在搜索r[进程模拟](http://detect respond.blogspot.com/2016/11/hunting for malware critical process.html)。
有许多不同的方法可以计算相似性。` huntlib`为此提供了'edit_distance()`函数,支持多种算法:
*[levenshtein距离](https://en.wikipedia.org/wiki/levenshtein距离)
*[damerau levenshtein距离](https://en.wikipedia.org/wiki/damerau%e2%80%93levenshtein距离)
*[hamming距离](https://en.wikipedia.org/wiki/hamming_distance)
*[jaro距离](https://en.wikipedia.org/wiki/jaro%e2%80%93winkler_distance)
*[jaro winkler距离](https://en.wikipedia.org/wiki/jaro%e2%80%93winkler_distance)
下面是一个示例:
``python
>;huntlib.edit_distance('svchost','scvhost')
1
````
有效方法是"levenshtein"、"damerau levenshtein"、"hamming"、"jaro"和"jaro winkler"。默认值为"damerau levenshtein"。
``python
>;>huntlib.edit_distance('svchost','scvhost',method='levenshtein')
2
````