跳转到主要内容

IntelMQ 联系人是一个包含相关专家机器人的联系人数据库

项目描述

两个专家机器人用于在数据库中查找联系信息并应用通知规则

intelmq-cb-mailgen解决方案的一部分。

可以从IntelMQ Mailgen 文档中获得设置概述。

联系人数据库

自动与手动联系人

支持两种类型的联系人。两者都通过一组不同的表名和列来建模。

'自动'用于外部维护的信息

_automatic结尾的表应包含由系统外部维护的联系人信息。它们设计成可以直接更新或重新导入。可能的导入来源有多个。

因此它们包含import_sourceimport_time列,以便以后决定使用哪些信息。并且没有额外的信息字段,因为这些信息可能会在更新或重新导入时丢失或错误。

外部导入源的示例是来自RIPE的联系人数据,请参阅README-ripe-import.md

'手动'用于特殊案例

如果自动联系人有错误或需要特殊案例,可以使用“手动”表(没有额外的名称后缀)。手动表中的信息应被视为主要来源,并在此联系人数据库内维护。

这些特殊信息应由系统普通用户输入,不应干扰原始的外部数据。为了保持系统的健壮和一致性,没有直接链接到自动表。

要在自动表中为已存在的联系人添加特殊信息,必须将此特定自动联系人的所有相关表条目复制到手动表中。手动联系人表缺少关于导入源的信息列,但具有注释和批注功能。

注释是自由文本字段,可以用来记录无法用现有结构化字段表达的其他信息。这允许记录稀有的条目或查看未来数据库模式版本中人们希望在数据库中看到的其他信息。

注释可以用作通用的“标签”,以引导系统行为,这可以在管理权限级别配置,但可以在用户级别选择。“简单”标签设计用于最好地表示一组可以组合的发送行为属性。建议保持标签数量低。标签在使用过程中需要调整,如果选择好的标签,它们将很容易使用。

抑制注释提供了一种基于情报事件字段内容阻止向用户发送信息的一般方式。如果在短时间内没有管理员可用,或者行为是异常行为,不表明一般行为组的变化,这是很重要的。《抑制》注释以更难使用为代价具有强大的功能。

如何更新外部源?

手动条目包含自动条目的额外信息,但同时也包含自动条目的复制部分。

如果自动导入源被更新,额外和复制的可能信息会过时,需要更改。

示例1:手动条目更正联系人电子邮件地址。在下次更新中,RIPE数据库中的电子邮件地址被更正为正确的地址。理想情况下,手动条目应该被删除,因为不再需要它。(尽管保留一段时间也无害。)

示例2:再次,手动条目更正联系人电子邮件地址。现在,网络不再由与RIPE数据库更新一起的组织提供服务。在这种情况下,必须从手动条目中删除CIDR,否则将发送不应发送给该组织的通知。

由于没有算法方法知道更新后哪种信息更好,因此需要人工介入。

截至撰写本文时,这必须由管理员完成,例如,每个导入源每周或每两周一次,例如

  1. 检查差异,如果需要,则进行导入更改。
  2. 停止查找专家机器人。
  3. 进行手动更改(例如,使用fody)。
  4. 完全替换此源的新版本。
  5. 重新启动查找机器人。

对于RIPE,有一个脚本将显示旧自动条目和新自动条目之间的差异,以及哪些手动条目受这些更改的影响(请参阅上述RIPE文档中的链接)。

数据库设置

需要python模块psycopg2(如果您也使用postgresql-output机器人,它已经安装了)。

至少需要Postgresql v>=9.5(与intelmq-fody-backend进行比较)。

以下命令假定PostgreSQL正在运行并监听默认端口。它们创建一个名为“contactdb”的数据库,这与机器人的默认配置相匹配。

    su - postgres

    createdb --encoding=UTF8 --template=template0 contactdb
    psql -f /usr/share/doc/intelmq-certbund-contact/sql/initdb.sql   contactdb

必须创建一个有权选择Contact DB中数据的数据库用户。这是将在机器人的配置中用于访问数据库的账户。

    createuser intelmq --pwprompt
    psql -c "GRANT SELECT ON ALL TABLES IN SCHEMA public TO intelmq;" contactdb

添加默认电子邮件标签

必须将直接与电子邮件地址相关联的标签的名称、值和默认值保存到数据库中。(也许fody-backend和fody的未来版本将允许编辑它们,但截至2021年2月25日它们不能。)

以下示例添加了两个带有一些值的标签名

INSERT INTO tag_name (tag_name, tag_name_order) VALUES ('Format', 1);
-- -> id 1
INSERT INTO tag_name (tag_name, tag_name_order) VALUES ('Constituency', 2);
-- -> id 2

COPY tag (tag_name_id, tag_value, tag_description, is_default) FROM STDIN
  WITH CSV;
1,CSV_inline,CSV inline,true
1,CSV_attachment,CSV attachment,false
2,network_operators,Network Operators,true
2,government,Government,false
2,CNI,Critical National Infrastructure,false
2,CNI_energy,CNI Energy,false
\.

(在2019-05的0.9.4版本中添加了电子邮件标签。)

架构更新

升级到新版本时,请查看UPDATE.md

添加新联系人

可以直接使用SQL将联系人添加到数据库中。尽管预期大多数用户会使用像Fody这样的前端应用程序。

当手动联系人放入表中时,条目将优先于通过ripe_import.py自动导入的联系人。

连接到数据库

  su - postgres
  psql contactdb

添加联系人

-- 1. Prepare contact information

  \set asn 3320
  -- unique name of the organization:
  \set org_name 'org1'
  \set org_comment 'Example comment on organization.'
  \set contact_email 'test@example.com'
  \set contact_comment 'Test comment on contact.'
  -- set the notification interval in seconds
  -- an interval of -1 means no notifications will be generated
  \set notification_interval 0

-- 2. Add new contact

  BEGIN TRANSACTION;
  INSERT INTO autonomous_system (number) VALUES (:asn);
  WITH new_org AS (
    INSERT INTO organisation (name,comment)
    VALUES (:'org_name',:'org_comment')
    RETURNING id
  ),
  new_contact AS (
    INSERT INTO contact (email,format_id,comment)
    VALUES (:'contact_email', 2, :'contact_comment')
    RETURNING id
  ),
  new_ota AS (
    INSERT INTO organisation_to_asn (organisation_id,asn_id,notification_interval)
    VALUES (
      (SELECT id from new_org), :asn, :notification_interval
    )
  )
  INSERT INTO role (organisation_id,contact_id) VALUES (
      (SELECT id from new_org),
      (SELECT id from new_contact)
    )
  ;
  COMMIT TRANSACTION;

示例更改标签

如果我们把简单的文本注释称为标签,那么如何更改已使用的标签呢?

当然,可能需要更改通知规则(参见mailgen文档),以及fody-backend发送给fody的已知标签列表。

例如,以下在数据库contactdb上的sql命令将标签whitelist-malware更改为Whitelist:Malware

BEGIN;

UPDATE autonomous_system_annotation
   SET annotation = '{"tag": "Whitelist:Malware"}'
 WHERE annotation ->> 'tag' = 'whitelist-malware';

UPDATE organisation_annotation
   SET annotation = '{"tag": "Whitelist:Malware"}'
 WHERE annotation ->> 'tag' = 'whitelist-malware';

UPDATE network_annotation
   SET annotation = '{"tag": "Whitelist:Malware"}'
 WHERE annotation ->> 'tag' = 'whitelist-malware';

UPDATE fqdn_annotation
   SET annotation = '{"tag": "Whitelist:Malware"}'
 WHERE annotation ->> 'tag' = 'whitelist-malware';

COMMIT;

根据特定标准抑制联系人的通知

可以基于某些标准抑制联系人的通知。这可以是:AS编号、IP地址、FQDN或组织。

要抑制此类对象的 notification,必须为该对象创建一个注释。

请记住:是否评估此类注释取决于规则专家

生成可视化ContactDB架构的图形

可以使用postgresql-autodoc来完成此操作。PG autodoc可在debian和ubuntu上通过apt获取。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

intelmq_certbund_contact-0.9.8.tar.gz (48.4 kB 查看散列)

上传时间

构建分发

intelmq_certbund_contact-0.9.8-py3-none-any.whl (54.4 kB 查看散列)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面