Arkime用户操作审计:满足合规性要求的日志配置

Arkime用户操作审计:满足合规性要求的日志配置

【免费下载链接】arkime 【免费下载链接】arkime 项目地址: https://gitcode.com/gh_mirrors/ark/arkime

在当今数据安全合规要求日益严格的环境中,用户操作审计已成为企业安全架构的关键组成部分。Arkime作为一款强大的网络流量分析工具,提供了完善的用户操作审计功能,帮助组织满足GDPR、HIPAA等合规性要求。本文将详细介绍如何配置和使用Arkime的审计日志功能,确保所有用户操作都可追溯、可审计。

审计日志核心组件

Arkime的审计功能主要通过cont3xt/audit.js模块实现,该模块负责记录、存储和管理用户操作日志。审计系统采用分层架构设计,包含以下核心组件:

  • 审计日志生成器:记录用户的关键操作,如登录、搜索、数据访问等
  • 日志存储管理器:负责日志的持久化存储和过期清理
  • 权限控制层:确保只有授权用户可以访问和管理审计日志
  • 查询API:提供审计日志的查询和导出功能

Arkime审计系统架构

审计日志数据结构

每个审计日志条目包含以下关键字段:

字段名类型描述
userId字符串执行操作的用户ID
issuedAt数字操作时间戳(毫秒)
took数字操作执行耗时(毫秒)
resultCount数字操作结果数量
iType字符串指标类型
indicator字符串指标值
tags数组操作相关标签
viewId字符串关联视图ID(可选)

审计日志的验证逻辑在verifyAudit方法中实现,确保所有必要字段都符合要求:

static verifyAudit(audit) {
  if (typeof (audit.userId) !== 'string') { return 'must have field userId of type string'; }
  if (typeof (audit.issuedAt) !== 'number') { return 'must have field issuedAt of type number (milliseconds)'; }
  if (typeof (audit.took) !== 'number') { return 'must have field took of type number (milliseconds)'; }
  if (typeof (audit.resultCount) !== 'number') { return 'must have field resultCount of type number'; }
  if (typeof (audit.iType) !== 'string') { return 'must have field iType of type string'; }
  if (typeof (audit.indicator) !== 'string') { return 'must have field indicator of type string'; }
  if (!Array.isArray(audit.tags)) { return 'must have field tags of type Array'; }
  if (typeof (audit.viewId) !== 'string' && audit.viewId !== undefined) { return 'field viewId must be of type string or undefined'; }
  return null;
}

审计日志配置与管理

日志保留期配置

Arkime允许管理员配置审计日志的保留时间,默认情况下系统会自动清理过期日志。配置通过expireHistoryDays参数实现,可在初始化审计模块时设置:

// 审计模块初始化示例
Audit.initialize({
  expireHistoryDays: 90 // 保留90天的审计日志
});

日志清理机制通过定时任务实现,每小时执行一次过期日志清理:

// 自动清理过期日志
const deleteExpiredAudits = () => {
  Db.deleteExpiredAudits(Date.now() - expireHistoryMsBack).then((numDeleted) => {
    console.log(`Successful deletion of ${numDeleted} expired history logs`);
  }).catch((err) => {
    console.log('ERROR - Failed to delete expired history logs.', err);
  });
};

// 立即执行一次清理,然后每小时执行一次
deleteExpiredAudits();
setInterval(deleteExpiredAudits, hourMs);

审计日志权限控制

Arkime的审计日志系统实现了严格的权限控制机制,确保只有授权用户可以访问和管理审计日志。权限控制逻辑在apiGetapiDelete方法中实现:

// 获取审计日志的权限控制
static async apiGet(req, res, next) {
  const roles = await req.user.getRoles();
  const audits = await Db.getMatchingAudits(req.user.userId, [...roles], req.query);
  
  // 按时间戳降序排序
  audits.sort((a, b) => b.issuedAt - a.issuedAt);
  
  res.send({ success: true, audits });
}

// 删除审计日志的权限控制
static async apiDelete(req, res, next) {
  const audit = await Db.getAudit(req.params.id);
  const roles = [...await req.user.getRoles()];
  
  if (!audit) {
    return res.send({ success: false, text: 'History log not found' });
  }
  
  // 权限检查
  if (!req.user.removeEnabled) {
    return res.send({ success: false, text: 'Can not delete a history log when user has data removal disabled.' });
  }
  
  if (req.user.userId !== audit.userId && !roles?.includes('cont3xtAdmin')) {
    return res.send({ success: false, text: 'User does not have permission to delete this log.' });
  }
  
  // 执行删除操作
  const results = await Db.implementation.deleteAudit(req.params.id);
  
  if (!results) {
    return res.send({ success: false, text: 'Database error' });
  }
  
  res.send({ success: true, text: 'Success' });
}

根据代码逻辑,只有满足以下条件之一的用户才能删除审计日志:

  1. 日志的创建者(userId匹配)
  2. 具有cont3xtAdmin角色的管理员
  3. 启用了数据删除权限(removeEnabled为true)

审计日志查询与导出

查询API使用

Arkime提供了RESTful API用于查询审计日志,支持按用户、时间范围、操作类型等条件过滤:

GET /api/audits?searchTerm=192.168.1.1&startMs=1620000000000&stopMs=1622592000000

该API返回符合条件的审计日志列表,按时间戳降序排列:

{
  "success": true,
  "audits": [
    {
      "userId": "admin",
      "issuedAt": 1622591999000,
      "took": 120,
      "resultCount": 50,
      "iType": "ip",
      "indicator": "192.168.1.1",
      "tags": ["search", "ip"],
      "viewId": "default"
    },
    // 更多审计日志...
  ]
}

结合用户角色的权限控制

审计日志的查询结果会根据用户角色进行过滤,普通用户只能查看自己的操作日志,而管理员可以查看所有用户的操作日志。这一逻辑在Db.getMatchingAudits方法中实现,确保数据访问符合最小权限原则。

集成用户认证与授权

Arkime的审计系统与用户认证模块紧密集成,通过common/auth.js实现细粒度的权限控制。系统支持多种认证方式,包括:

  • 基本认证(Basic Auth)
  • 摘要认证(Digest Auth)
  • 基于头部的认证(Header Auth)
  • OpenID Connect认证(OIDC)
  • 表单认证(Form Auth)

角色与权限映射

Arkime定义了多种系统角色,用于控制用户对审计功能的访问权限:

const systemRolesMapping = {
  superAdmin: ['usersAdmin', 'arkimeAdmin', 'arkimeUser', 'parliamentAdmin', 'parliamentUser', 'wiseAdmin', 'wiseUser', 'cont3xtAdmin', 'cont3xtUser'],
  usersAdmin: [],
  arkimeAdmin: ['arkimeUser'],
  arkimeUser: [],
  parliamentAdmin: ['parliamentUser'],
  parliamentUser: [],
  wiseAdmin: ['wiseUser'],
  wiseUser: [],
  cont3xtAdmin: ['cont3xtUser'],
  cont3xtUser: []
};

其中,cont3xtAdmin角色拥有审计日志的完全管理权限,包括查看所有用户日志和删除日志的权限。

用户操作审计范围

Arkime审计系统记录的用户操作包括但不限于:

  • 用户登录和注销
  • 流量搜索操作
  • 数据导出和下载
  • 配置修改
  • 角色和权限变更
  • PCAP文件访问

所有这些操作都会被记录到审计日志中,确保完整的操作审计跟踪。

最佳实践与合规性建议

审计日志保留策略

为满足不同合规性要求,建议根据组织的合规需求配置适当的日志保留期:

  • GDPR合规:建议至少保留7年
  • HIPAA合规:建议保留6年以上
  • PCI DSS合规:建议保留至少1年

可以通过修改配置文件中的expireHistoryDays参数来设置:

# 在配置文件中设置审计日志保留期
expireHistoryDays=365

安全存储审计日志

审计日志包含敏感的操作信息,建议采取以下措施确保其安全性:

  1. 定期备份审计日志,防止日志数据丢失
  2. 配置单独的审计日志存储,与业务数据分离
  3. 对审计日志进行完整性校验,防止篡改
  4. 限制对审计日志存储的直接访问

审计日志分析与告警

建议结合SIEM系统对Arkime的审计日志进行实时监控,设置以下关键告警规则:

  • 多次失败的登录尝试
  • 大量数据下载操作
  • 异常时间的访问(如凌晨时段的批量操作)
  • 管理员权限的变更
  • 对敏感IP或端口的频繁访问

通过common/notifier.js模块,可以配置审计告警通知,及时响应潜在的安全事件。

总结与展望

Arkime的用户操作审计系统为组织提供了强大的合规性支持,通过本文介绍的配置和最佳实践,您可以构建一个满足严格合规要求的审计体系。关键要点包括:

  1. 合理配置审计日志保留期,满足不同合规框架的要求
  2. 利用角色权限控制,确保审计数据的安全性
  3. 定期审查审计日志,及时发现异常操作
  4. 结合自动化工具进行日志分析和告警

随着Arkime的不断发展,审计功能将进一步增强,未来可能会引入更细粒度的操作审计、实时合规性检查和更丰富的可视化报表功能。建议定期查看项目的更新日志CHANGELOG,及时了解新功能和改进。

通过正确配置和使用Arkime的审计功能,组织不仅可以满足法规合规要求,还能提高整体安全态势感知能力,及时发现和响应潜在的安全威胁。

【免费下载链接】arkime 【免费下载链接】arkime 项目地址: https://gitcode.com/gh_mirrors/ark/arkime

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值