用于检测加密材料,如SSH密钥和SSL证书。
文件:libcurl.so.5.3.0
yara文件:https://github.com/leiwuhen92/yara_rule/blob/main/compile_rule/crypto_material.yc
yara命令检测:
yara --print-meta --print-strings crypto_material.yar ibcurl.so.5.3.0
实现逻辑:
import pathlib
import yara
NAME="crypto_material"
CHINESE_NAME="密钥及证书检测"
CHINESE_DESCRIPTION="检测加密材料,如SSH密钥和SSL证书"
# 结果存储位置
class FileAnalysis():
def__init__(self):
self.file_path="libcurl.so.5.3.0"
self.processed_analysis={}
file_object=FileAnalysis()
# 特征文件路径
compile_path=pathlib.Path("crypto_material.yc")
# 加载特征文件
rule=yara.load(str(compile_path))
# 匹配
result=rule.match(file_object.file_path)
print("result:%s"%result)
# 解析结果
file_object.processed_analysis[NAME]={}
summary=set()
foriteminresult:
print(item)
print(item.rule)
print(item.meta)
summary.add(item.rule)
file_object.processed_analysis[NAME][item.rule]={"meta":item.meta}
file_object.processed_analysis[NAME]["summary"]=list(summary)
mongo_data={
"file_path":file_object.file_path,
"processed_analysis":file_object.processed_analysis
}
print(mongo_data)
运行结果:
result:[genericPublicKey]
genericPublicKey
genericPublicKey
{'author': 'Joerg Stucke', 'description': 'Generic Public Key Block', 'date': '2017-03-16', 'version': '2', 'version_schema_information': 'Version number is increased whenever something changes.'}
{
"file_path":"libcurl.so.5.3.0",
"processed_analysis": {
"crypto_material": {
"genericPublicKey": {
"meta": {
"author":"Joerg Stucke",
"description":"Generic Public Key Block",
"date":"2017-03-16",
"version":"2",
"version_schema_information":"Version number is increased whenever something changes."
}
},
"summary": [
"genericPublicKey"
]
}
}
}
从结果可知密钥方式为genericPublicKey。
genericPublicKey的yara规则如下:两条字符串在文本内
HxD工具打开libcurl.so.5.3.0:搜索yara中的两条字符串(-----BEGIN PUBLIC KEY----- 与 -----END PUBLIC KEY-----),都能检索到
参考:
该文章展示了如何利用Yara规则库检测加密材料,如SSH密钥和SSL证书。通过加载crypto_material.yar文件,对libcurl.so.5.3.0文件进行匹配,结果显示检测到了genericPublicKey。HxD工具验证了Yara规则中定义的字符串存在。
329

被折叠的 条评论
为什么被折叠?



