Security:如何安装 Elastic SIEM 和 EDR
转载自:https://elasticstack.blog.csdn.net/article/details/114023944
需要学习的地方:生成SSL证书
图片结合最下方的代码文字使用
lastic Security 为分析人员提供了预防,检测和响应威胁的手段。 该解决方案解决了SIEM,endpoint,威胁搜寻等安全用例,使 SecOps 团队能够收集各种数据,执行自动化和分析师驱动的分析,并通过嵌入式工作流和自动化来应对安全威胁。在今天的文章中,我将介绍如何安装 Elastic SIEM 及 EDR。
在我的系统配置中,我们使用如下的结构:
我有两台机器,在其中的一台机器上安装有 Elasticsearch,Filebeat 及 Kibana,而在另外一台机器上安装有 endpoint agent。在今天的练习中,我将详细地介绍如何一步一步地完成整个安装。
安装 Elastic Stack 基础
尽管我在之前的很多文章中有介绍如何安装 Elastic Stack,我还是想一步一步地来详细介绍。就我而言,我使用的是 Elastic Stack 的最新版本7.11.1。对于我的 Elastic Stack 设置,我使用的是一个单台的 Ubuntu 20.04 机器。 该服务器将运行 Elasticsearch 和 Kibana。
安装 Elasticsearch
首先安装 transport-https
sudo apt-get install curl apt-transport-https
接下来,将 Elastic 仓库添加到你的源列表。
curl -s https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
然后更新。
sudo apt update
现在安装 Elasticsearch
sudo apt-get install elasticsearch
对于中国有的开发者来说,上面的安装步骤可能会很慢,一种办法就是直接到网址 https://www.elastic.co/downloads/ 直接下载 Elasticsearch 的 deb 安装包,并按如下的命令来进行安装:
sudo dpkg -i elasticsearch-7.11.1-amd64.deb
安装 Elasticsearch 之后,我们需要对其配置文件进行几处更改。 该文件位于 /etc/elasticsearch/elasticsearch.yml 中。要访问此文件,你需要 root 特权。
首先,我们需要更改 network.host 值。 其默认设置为 localhost。 将其更改为安装了 Elasticsearch 的主机的 IP 地址。
cluster.name: demo-elk
node.name: elk-1
network.host: 0.0.0.0
discovery.type: single-node
现在,你应该准备启动 Elasticsearch 并检查它是否已正确启动。
sudo service elasticsearch start
我们可以使用如下的命令来查看 elasticsearch 服务的状态:
service elasticsearch status
如上所示,如果我们看到 Elasticsearch 服务的状态为 active,则表明它的安装是成功的。
你还可以通过运行以下命令来检查 Elasticsearch 是否可从其他主机访问:
curl http://<elasticsearch_ip>:9200
输出应类似于以下内容:
安装 Kibana
运行以下命令以安装 Kibana。
sudo apt install kibana
对于中国有的开发者来说,上面的安装步骤可能会很慢,一种办法就是直接到网址 https://www.elastic.co/downloads/ 直接下载 Kibana 的 deb 安装包,并按如下的命令来进行安装:
sudo dpkg -i kibana-7.11.1-amd64.deb
一旦安装完成后,编辑 /etc/kibana/kibana.yml 并指定托管 Kibana 的 IP 地址。
server_port: 5601
server_host: 0.0.0.0
server_name: demo-kibana
在上面,我们可以只修改 server_host 即可,其它的我们可以使用默认的配置即可。设置 server_host 为 0.0.0.0 为的是我们可以在其它的机器上访问当前的 Kibana。我们可以使用 Ubuntu 机器的 IP 地址加上端口 5601 就可以访问了。
启动 Kibana 并检查其状态。
sudo service kibana start
sudo service kibana status
如果我们能看到状态为 active,则表明我们的安装是成功。我们可以通过另外一个电脑来访问 Kibana:
你如果能看到上面的画面,则表明你的安装是成功的。
安装 Beats
Filebeat 用于将数据从设备传送到 Elasticsearch。 对于不同的产品,有许多不同的 Filebeat 模块,它们以所需的格式将日志和数据发送到 Elasticsearch。 在此示例中,我们将模块用于 Zeek,但是 Elastic 也扩展了其对其他产品的支持,包括 AWS,CrowdStrike,ZScaler 等。
目前,我们只打算在运行 Zeek 的主机上安装 Filebeat,我们稍后会对其进行配置。
sudo apt-get install filebeat
对于中国有的开发者来说,上面的安装步骤可能会很慢,一种办法就是直接到网址 https://www.elastic.co/downloads/ 直接下载 Filebeat 的 deb 安装包,并按如下的命令来进行安装:
sudo dpkg -i filebeat-7.11.1-amd64.deb
安装 Zeek
现在,我们准备着手安装 Zeek。 首先,我们需要安装所有必备组件。 通过运行以下命令来执行此操作。
sudo apt-get install cmake make gcc g++ flex bison libpcap-dev libssl-dev python-dev swig zlib1g-dev
接下来,我们需要为 Zeek 创建工作目录,由于某些原因,Zeek 在安装时默认不执行此操作。
sudo mkdir /opt/zeek
sudo chown -R root:root /opt/zeek
sudo chmod 740 /opt/zeek
接下来下载带有 GIT 的 Zeek
git clone --recursive https://github.com/zeek/zeek
等下载完文件,进入 zeek 下载目录。 然后将我们先前创建的 /opt/zeek 目录设置为安装目录。
cd /home/$USER/zeek
./configure --prefix=/opt/zeek
在上面,我们假设你把 zeek 的文件 clone 到 home 目录下的 zeek 目录。现在,我们准备安装 Zeek,运行以下 make 命令,然后将其保留安装(这可能需要一些时间)
make
sudo make install
接下来,我们需要添加 PATH 环境变量
export PATH=/opt/zeek/bin:$PATH
我们可以在 /opt/zeek/etc 找到一个叫做 node.cfg 的配置文件。
# pwd
/opt/zeek/etc
root@liuxgu:/opt/zeek/etc# ls
networks.cfg node.cfg zeekctl.cfg zkg
这个文件包含对 zeek 的节点配置。我们需要配置我们的 interface:
node.cfg
上面的 interface, 我们可以通过 ifconfig 命令来获得本机的接口。另外,我们需要安装 sendmail,否则在运行 zeek 时会发生无法找到 sendmail 的错误。
sudo apt-get install sendmail
现在,我们准备运行下面的命令来部署 Zeek。我们需要在 root 账号下运行:
zeekctl deploy
我们可以在 /opt/zeek/logs 目录里发现日志。“current” 目录保存当天的日志,而前几天的日志则存档到其自己的目录中。 还有一个针对不同数据类型的日志文件,例如 DNS 连接,HTTP 连接等。
让我们检查DNS日志
# pwd
/opt/zeek/logs
root@liuxgu:/opt/zeek/logs# ls
2021-02-24 current
配置安全
就目前而言,我们在 ELK 部署中拥有的唯一功能是日志提取和可视化。 我们可以将日志提取到 Elastisearch 中,并通过 Kibana 可视化来处理数据,但是缺少 SIEM 的核心功能。 我们无法建立检测或用例。 此功能不是“开箱即用”的,要使用它,我们必须首先在所有不同节点之间配置安全性。 X-Pack 是 Elastic 软件包,它基本上负责所有 Elastic Security 功能。
所需的一个关键组件是配置每个节点之间的 SSL 连接,可以通过多种方法进行。 我们也将使用 X-Pack 来执行此操作。
首先,在安装了 Elasticsearch 的主机上,我们需要创建一个 YAML 文件 /usr/share/elasticsearch/instances.yml,它将包含我们要使用 SSL 保护的不同节点/实例。 就我而言,我只有 Elasticsearch,Kibana 和 Zeek。
/usr/share/elasticsearch/instances.yml
instances:
- name: "elasticsearch"
ip:
- "192.168.0.4"
- name: "kibana"
ip:
- "192.168.0.4"
- name: "zeek"
ip:
- "192.168.0.4"
- name: "windows"
ip:
- "192.168.0.6"
请注意,在上面,192.168.0.6 是 Windows 的 IP 地址。在接下来的练习中,它将被用于 ingest agent 的安装中。接下来,我们将使用 Elastic 的 certutil 工具为我们的实例生成证书。 这也将生成一个证书颁发机构(Certificate Authority)。
/usr/share/elasticsearch/bin/elasticsearch-certutil cert ca --pem --in instances.yml --out certs.zip
这将为我们的每个实例创建一个 .crt 和 .key 文件,以及一个 ca.crt 文件。你可以使用 unzip 来解压缩不同的证书。
unzip /usr/share/elasticsearch/certs.zip -d /usr/share/elasticsearch/
现在我们有了我们的证书,我们可以配置每个实例。
配置 Elasticsearch SSL
首先,我们需要创建一个文件夹将你的证书存储在我们的 Elasticsearch 主机上。
mkdir /etc/elasticsearch/certs/ca -p
接下来,我们需要将解压缩的证书复制到其相关文件夹中并设置正确的权限。
cp ca/ca.crt /etc/elasticsearch/certs/ca
cp elasticsearch/elasticsearch.crt /etc/elasticsearch/certs
cp elasticsearch/elasticsearch.key /etc/elasticsearch/certs
chown -R elasticsearch: /etc/elasticsearch/certs
chmod -R 770 /etc/elasticsearch/certs
接下来,我们需要将 SSL 配置添加到我们的 /etc/elasticsearch/elasticsearch.yml 文件中。
/etc/elasticsearch/elasticsearch.yml
# Transport layer
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.key: /etc/elasticsearch/certs/elasticsearch.key
xpack.security.transport.ssl.certificate: /etc/elasticsearch/certs/elasticsearch.crt
xpack.security.transport.ssl.certificate_authorities: [ "/etc/elasticsearch/certs/ca/ca.crt" ]
# HTTP layer
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.verification_mode: certificate
xpack.security.http.ssl.key: /etc/elasticsearch/certs/elasticsearch.key
xpack.security.http.ssl.certificate: /etc/elasticsearch/certs/elasticsearch.crt
xpack.security.http.ssl.certificate_authorities: [ "/etc/elasticsearch/certs/ca/ca.crt" ]
现在重新启动 Elasticsearch。
service elasticsearch restart
配置 Kibana SSL
现在,我们将重复此过程,但这一次是 Kibana。 Kibana 的配置略有不同。同样,将你的证书移动到正确的文件夹并设置正确的权限。
注意:以下步骤假定你正在运行独立的 ELK 配置。 如果你正在运行分布式部署,则需要将证书移至适当的主机。
mkdir /etc/kibana/certs/ca -p
cp ca/ca.crt /etc/kibana/certs/ca
cp kibana/kibana.crt /etc/kibana/certs
cp kibana/kibana.key /etc/kibana/certs
chown -R kibana: /etc/kibana/certs
chmod -R 770 /etc/kibana/certs
接下来,在文件 /etc/kibana/kibana.yml 中,在 Elasticsearch 和 Kibana 之间添加SSL设置。
/etc/kibana/kibana.yml
# The URLs of the Elasticsearch instances to use for all your queries.
elasticsearch.hosts: ["https://192.168.0.4:9200"]
elasticsearch.ssl.certificateAuthorities: ["/etc/kibana/certs/ca/ca.crt"]
elasticsearch.ssl.certificate: "/etc/kibana/certs/kibana.crt"
elasticsearch.ssl.key: "/etc/kibana/certs/kibana.key"
然后在同一文件中,在 Kibana 和浏览器之间添加配置。
# These settings enable SSL for outgoing requests from the Kibana server to the browser.
server.ssl.enabled: true
server.ssl.certificate: "/etc/kibana/certs/kibana.crt"
server.ssl.key: "/etc/kibana/certs/kibana.key"
然后,重新启动 Kibana。
service kibana restart
配置 Beats (Zeek) SSL
下一步,我们需要为运行 Zeek 和 Beats 的主机配置 SSL。 如果你没有运行 Zeek 或其他使用 Filebeats 模块的产品,例如 Suricata,Windows Event Log 等,则可以跳过此步骤。
首先将证书复制到运行 Zeek 的主机上,然后使用正确的权限创建证书目录。 您需要同时复制 Zeek 证书和 CA 证书。
mkdir /etc/filebeat/certs/ca -p
cp ca/ca.crt /etc/filebeat/certs/ca
cp zeek/zeek.crt /etc/filebeat/certs
cp zeek/zeek.key /etc/filebeat/certs
chmod 770 -R /etc/filebeat/certs
接下来,我们需要将更改添加到 /etc/filebeat/filebeat.yml。
首先,我们的 Elasticsearch 配置设置。
# Elastic Output
output.elasticsearch.hosts: ['192.168.0.4:9200']
output.elasticsearch.protocol: https
output.elasticsearch.ssl.certificate: "/etc/filebeat/certs/zeek.crt"
output.elasticsearch.ssl.key: "/etc/filebeat/certs/zeek.key"
output.elasticsearch.ssl.certificate_authorities: ["/etc/filebeat/certs/ca/ca.crt"]
然后是我们的 Kibana 配置设置。
setup.kibana:
host: "https://192.168.0.4:5601"
ssl.enabled: true
ssl.certificate_authorities: ["/etc/filebeat/certs/ca/ca.crt"]
ssl.certificate: "/etc/filebeat/certs/zeek.crt"
ssl.key: "/etc/filebeat/certs/zeek.key"
然后重新启动 Filebeat。
service filebeat restart
现在,你可以通过运行以下命令来检查 FileBeats 是否可以连接到 Elasticsearch。 一切都应该返回“OK”。
filebeat test output
添加身份验证
我们还需要向 Elasticsearch 添加身份验证。 这很容易做到。 首先通过编辑 /etc/elasticsearch/elasticsearch.yml 启用安全
/etc/elasticsearch/elasticsearch.yml
# X-Pack Setting
xpack.security.enabled: true
设置完上面,我们必须重新启动 Elasticsearch:
service elasticsearch restart
接下来,我们需要为所有内置的 Elasticsearch 角色和用户生成密码。 Elasticsearch 附带了一个工具来执行此操作。 运行以下命令以生成这些密码并将其保存在安全的地方(密码管理器)。
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
为了方便,我将把所有的账号的密码都设置为 password。
我们可以通过另外一个机器来访问 ubuntu 机器 https://ubuntu.9200。当 Chrome 浏览器上出现如下的画面时:
我们在当前的页面打入如下的字符串:
thissisunsafe
我们就可以看到:
我们把用户名及密码 elastic/password 输入进去即可:
针对 Kibana,我们需要修改 /etc/kibana/kibana.yml 文件,并把相应的用户名及密码填入:
/etc/kibana/kibana.yml
elasticsearch.username: "kibana_system"
elasticsearch.password: "password"
修改完后,我们必须重新启动 Kibana:
service kibana restart
我们也可以按照同样的方法来启动 Kibana https://ubuntu:5601。
接下来,将新创建的 Elasticsearch 凭证添加到我们的 Filebeat 配置文件中:
/etc/filebeat/filebeat.yml
# Elastic Credentials
output.elasticsearch.username: "elastic"
output.elasticsearch.password: "Your_Elastic_Pass_Here"
我们需要重新启动 Filebeat:
service filebeat restart
添加 Zeek 数据到 Elasticsearch
我们可以通过 Filebeat 把 Zeek 的日志信息导入到 Elasticsearch 中去。首先,我们必须启动 zeek 模块。我们打开 Kibana 的界面:
里面有详细的步骤介绍如何配置 Filebeat。首先,我们需要使用如下的命令来启动 zeek 模块:
sudo filebeat modules enable zeek
$ sudo filebeat modules enable zeek
Enabled zeek
完成后,我们需要配置 Zeek 将 Zeek 日志转换为 JSON 格式。 首先,停止 Zeek 的运行。然后将 @load policy / tuning / json-logs.zeek 行编辑到文件 /opt/zeek/share/zeek/site/local.zeek
保存好文件,并重新启动 zeek:
zeekctl deploy
现在检查日志是否为 JSON 格式。 即使你不熟悉 JSON,日志的格式也应该与以前明显不同。
tail -f /opt/zeek/logs/current/dns.log
然后编辑配置文件 /etc/filebeat/modules.d/zeek.yml。 我们需要指定 Zeek 创建的每个单独的日志文件,或者至少指定我们希望 Elasticsearch 提取的日志文件。 对于 /opt/zeek/logs/ 文件夹中的每个日志文件,必须定义 “current” 日志的路径以及以前的任何日志,如下所示。
dns:
enabled: true
var.paths: [ "/opt/zeek/logs/current/dns.log", "/opt/zeek/logs/*.dns.json" ]
如果 opt 文件夹中有一些默认日志文件(例如 capture_loss.log),你不希望 Elasticsearch 提取这些文件,则只需将 “enabled” 字段设置为 false。 重要的是,将在 /opt/zeek/logs中没有日志文件的所有日志源设置为 enabled: false,否则会收到错误消息。 此外,请务必注意间距,因为 YML 文件对空格敏感。在我的 current 目录中我们可以看到如下的文件:
root@liuxgu:/opt/zeek/logs/current# ls
capture_loss.log http.log ntp.log ssh.log weird.log
conn.log known_services.log packet_filter.log stats.log
dhcp.log loaded_scripts.log reporter.log stderr.log
dns.log notice.log software.log stdout.log
那么我们的 /etc/filebeat/modules.d/zeek.yml 最终格式为:
json
完成后,你应该可以很好地启动 Filebeat 并启动该服务。
sudo filebeat setup
sudo service filebeat restart
我们将在 Kibana 中看到如下的信息:
点击上面的 Zeek Overview 按钮, 我们将看到 Zeek 的信息:
如果你转到 SIEM 应用程序中的网络仪表板,则应该看到使用 Zeek!数据填充的不同仪表板! 这里的仪表板很好地概述了从网络中收集的一些数据。
启动检测
一旦完成上述所有步骤,并将数据提取到 Elasticsearch 中,你可能会注意到仍然无法创建检测。
点击上面的 View document。这是我们最后要完成的步骤。 编辑你的 Kibana 配置件 /etc/kibana/kibana.yml,然后添加 xpack.encryptedSavedObjects.encryptionKey。 我相信这可以是任何32个字符串。
xpack.security.enabled: true
# xpack.fleet.agents.tlsCheckDisabled: true
xpack.encryptedSavedObjects.encryptionKey: "something_at_least_32_characters"
重新启动 Kibana:
service kibana restart
经过上面的设置后,我们终于可以创建检测规则了:
安装 Endpoint agent
现在,我们准备安装 Elastic endpoint。首先,通过单击侧面菜单上管理标签下的链接,导航到 “Fleet” 仪表板。
如果我们现在将代理安装到 Windows 主机上,则会收到一个错误消息,即我们的自签名证书来自不受信任的来源,并且代理安装将失败。因此,我们需要做的是将我们的 CA 证书添加为 Windows 主机上的受信任证书。
安装证书
首先在 Windows 搜索栏中搜索 “本地安全策略”。 然后转到 安全设置 > 公钥策略 > 证书路径验证设置
然后,选中“定义这些策略设置”,然后选中 “允许使用用户信任的根CA来验证证书” 和 “允许用户信任对等信任证书” 选项(如果尚未选中)。
最后,选中 “第三方根CA 和企业根CA”。单击 “应用”,然后单击 “确定”。
接下来在 Windows 搜索栏中搜索 certmgr.msc。
然后转到 “受信任的根证书颁发机构” > “证书”,右键单击空白处的任意位置,然后选择 “所有任务” > “导入”
然后简单地按照向导操作,并选择我们之前创建的 ca.crt。
安装 endpoint agent
现在,我们准备安 Elastic agent。 从 Fleet Dashboard 复制安装命令,并在该代理所在的 Windows 主机上使用 PowerShell 运行它。由于 Elastic Stack 是运行于另外一个机器上的,我们需要对它做一些配置。我们可以参考文章 “Elastic:Elastic Security 入门”。这里就不再详述了。
在我们安装 ingest agent 的时候,我们需要按照如下的方式来进行安装:
由于一些原因,当前的版本对注册表中的证书还不能正确认识,我们可以使用如下命令来进行安装 ingest agent:
在上面,我们使用 -a 来定义证书的路径。一旦 enroll 成功,我们就可以看到:
我们可以看到状态变为 Healthy。
Security:如何安装 Elastic SIEM 和 EDR的更多相关文章
- docker安装elastic search和kibana
安装目标 使用docker安装elastic search和kibana,版本均为7.17.1 安装es 1. docker pull 去dockerhub看具体版本,这里用7.17.1 docker ...
- aws ec2 安装Elastic search 7.2.0 kibana 并配置 hanlp 分词插件
文章大纲 Elastic search & kibana & 分词器 安装 版本控制 下载地址 Elastic search安装 kibana 安装 分词器配置 Elastic sea ...
- 使用 Docker 安装 Elastic Stack 8.0 并开始使用
文章转载自:https://mp.weixin.qq.com/s/fLnIzbbqYfILS6uCvGctXw 运行 Elasticsearch docker network create elast ...
- Firefox Security Toolkit 安装
目的: 下载Firefox Security Toolkit加载到浏览器里,增强渗透测试的工具利用. 兼容性: 目前仅支持Linux/Unix环境(可在kali上安装使用). 下载安装: wget h ...
- 2 ubuntu 16.04 安装Elastic Stack
一: 安装JAVA8 添加ppa sudo add-apt-repository ppa:webupd8team/java sudo apt-get update 安装oracle- ...
- 单实例安装elastic和启动报错解决
下载 先到官网https://www.elastic.co/cn/downloads/past-releases/elasticsearch-5-5-2下载,我安装的是5.5.2的版本,其他版本直接访 ...
- chrom中安装elastic search head插件
1. 访问https://chrome.google.com/webstore/detail/elasticsearch-head/ffmkiejjmecolpfloofpjologoblkegm/ ...
- Solutions:Elastic SIEM - 适用于家庭和企业的安全防护 ( 一)
- Solutions:Elastic SIEM - 适用于家庭和企业的安全防护 ( 二)
随机推荐
- Git Rebase操作
概括 rebase翻译过来为"变基",可以理解为改变基础,它可以用于分支合并和修改提交记录. 合并分支的区别 我们知道merge操作也可以用于分支合并,但是其和rebase操作有着 ...
- poste.io自建邮件服务器
随便说些什么 腾讯企业邮新增账号不方便,这里的主要是指不经过手机验证或微信扫码的,虽然提供了最多3个"业务邮箱",很明显不够用. EwoMail,装没装起来我不记得了,反正是不好用 ...
- Python语言之面向对象
Python语言之面向对象 前言 面向对象 -- Object Oriented 简写:OO 面向对象设计 -- Object Oriented Design 简写:OOD 面向对象编程 -- Obj ...
- 背包问题学习笔记 / Dynamic Programming(updating)
01背包问题 朴素版:(二维数组) 状态表示: dp[i][j]:从前i个物品中选择(每个物品只能选0或1个)且总体积不超过j的集合的最大价值,则dp[n][m]就是最终答案(n:物品数量,m ...
- 一面数据: Hadoop 迁移云上架构设计与实践
背景 一面数据创立于 2014 年,是一家领先的数据智能解决方案提供商,通过解读来自电商平台和社交媒体渠道的海量数据,提供实时.全面的数据洞察.长期服务全球快消巨头(宝洁.联合利华.玛氏等),获得行业 ...
- AI全流程开发难题破解之钥
摘要:通过对ModelArts.盘古大模型.ModelBox产品技术的解读,帮助开发者更好的了解AI开发生产线. 本文分享自华为云社区<[大厂内参]第16期:华为云AI开发生产线,破解AI全流程 ...
- Python 爬取汽车之家口碑数据
本文仅供学习交流使用,如侵立删!联系方式见文末 汽车之家口碑数据 2021.8.3 更新 增加用户信息参数.认证车辆信息等 2021.3.24 更新 更新最新数据接口 2020.12.25 更新 添加 ...
- C++11实现可变参数泛型抽象工厂
- Redis 07 有序集合
参考源 https://www.bilibili.com/video/BV1S54y1R7SB?spm_id_from=333.999.0.0 版本 本文章基于 Redis 6.2.6 Zset 就是 ...
- 用VS Code搞Qt6:至简窗口部件——QWidget
在正题开始之前,老周照例扯点别的.嗯,咱们扯一下在 VS 2022 下结合 CMake 开发 Qt6 时的环境变量设置问题.在VS Code 中,通够通过 CMake Tools 扩展的配置来设置环境 ...