入侵检测数据集_威胁检查分析与数据管理实践之基于入侵检测对HTTP流量的分析...

news/2024/7/3 10:31:54 标签: 入侵检测数据集

20ecde95857ee451875efc3030d669c7.gif

0x01 概要

在安全运营工作当中,经常需要系统日志、设备威胁事件日志、告警日志等 各种日志进行收集汇聚,具体分析,通过日志来分析威胁事件发生源头、相关联的人和资产关系,以日志数据的角度,来追究溯源威胁事件发生的过程和基本概括原貌。评估威胁事件产生危害的影响范围,关联到人与资产,采取顺藤摸瓜,将各种信息进行关联,无论是二维关系数据联系关联,还是大数据分析建模,数据的分类采集都是基础工作。

企业安全相关的各种日志数据,存放的位置、形式、大小、业务、使用人群都不同,如何根据不同业务规模的日志数据,采取相得益彰的技术形式进行合理的日志、聚合、分析、展示,就成为了一个课题,接下来,我们主要围绕这些相关的主题进行讨论分享,通过具体的日志聚合分析实践,让数据有效的关联,使其在威胁事件分析、应急事件分析响应过程中让数据起到方向性指引作用、起到探测器的作用,通过以上技术实践,让更多日志数据,有效的为企业安全运营提供更好的服务。

在实际工作当中,日志聚合分析工具种类繁多:ELK、Graylog、Spark、Clickhouse、Superset 等工具。我们以常用的日志数据使用场景为例子,结合这些工具的使用,向大家展示在实际数据工作中数据运营的情况,如何进行数据聚合分析,以提供实际的操作案例,能能直观的了解数据管理的工作流程,之后可以重复实践,不绕道走远路,着重给出日志分析工具使用的要点,快速上手掌握相关工具的使用,掌握日常日志数据实操及相关方法论。

为了方便实践,尽量避免商业系统和设备在案例中的出现,以可以方便取材的开源项目为基础,展开案例的讲解,大家可以容易的在网上取材这些软件系统,在本地完成实践练习过程。

本篇介绍入侵检测系统 Suricata 及威胁日志事件管理系统 Graylog,通过对入侵检测系统的日志进行收集,来展现日志收集处理的典型过程。

开源 IDS 系统 Suricata 与威胁事件日志管理平台 Graylog 结合,对网络环境流量进行监听与日志收集分析统计,通过 Suricata 捕获输出的日志,经过 Nxlog 日志收集工具,将相关事件日志、告警日志、HTTP 流量日志,通过 Graylog 进行日志聚合,对日志进行统计分析,分析网络环境流量中存在各种威胁事件类型,通过自定义 Suricata 的检测规则,控制入侵检测的策略以及入侵检查系统的输出结果。

0x02 系统部署架构

2.1 开源 IDS

Suricata是一个免费、开源、成熟、快速、健壮的网络威胁检测引擎。Suricata 引擎能够进行实时入侵检测 (IDS)、内联入侵预防 (IPS)、网络安全监控 (NSM) 和离线 pcap 处理。Suricata 使用强大而广泛的规则和签名语言来检查网络流量,并提供强大的 Lua 脚本支持来检测复杂的威胁。使用标准的输入和输出格式 (如 YAML 和 JSON),使用现有的 SIEMs SplunkLogstash/Elasticsearch、Kibana 和其他数据库等工具进行集成将变得非常简单。Suricata 项目和代码由开放信息安全基金会 (OISF) 拥有和支持,OISF 是一个非盈利基金会,致力于确保 Suricata 作为一个开源项目的开发和持续成功。

2.2 威胁事件管理

Graylog 是一个开源日志聚合系统,与 ElasticSearch 紧密配合并提供了对 ES 数据操作的更多支持,可以通过 Graylog 创建、管理 ElasticSearch 的索引,对索引的进群结点的分片管理,生存的时间周期管理、API 数据查询访问管理 提供了各种支持。对各种网络协议的日志收集也提了友好的支持。

Graylog 提供的这些功能,让 Graylog 对各种系统输出的日志进行收集,得心应手,日志收集的方式也多种多样,Syslog、Kafka、HTTP 的 REST API 等形工都支持。

Graylog 可以与开源威胁情报、地理位置信息集合,直接在收集日志之后 对日志数据当中 IP、域名等信息进行查询,对流量中的 IP 地理信息进行可视化显展。

2.3 威胁事件处理概要

开源 IDS 系统有很多种,比较著名的系统有 Snort、Suricata、Zeek 等,我们选用 Suricata 是因为 Suricata 有多年的发展历史,沉淀了的各种威胁检测规则,新版的 Suricata3 与 DPDK 相结合,处理大级别流量的数据分析 Suricata 支持 Lua 动态语言工具支持,可以通过 Lua 扩展对流量分析的各种实用工具。

Suricata 与 Graylog 结合的原因,是因为在 Graylog 开源社区版本对用数据的数据处理量没有上限限制,可以扩展很多的结点来扩展数据存储的空间和瞬时数据处理的并发能力。Suricata 在日志输出方面,可以将日志的输出,输出成标准的 JSON 格式,通过日志脚本收集工具,可以将日志数据推送给 Graylog 日志收集服务,Graylog 只要对应创建日志监听,就可以对 JSON 日志数据,进行实时快速的收集与对日志数据结构化和格式化。将 JSON 按 Key 和 Value 的形式进行拆分,然后保存到 ElasticSearch 数据库中,并提供一整套的查询 API 取得 Suricata 日志输出结果。

在通过 API 取得数据这种形式以外,Graylog 自身就已经支持了插件扩展,数据监控面板,数据查询前台,本地化业务查询语言,类 SQL 语言。

通过开源 IDS 与开源 SIEM 结合,用 Suricata 分析威胁产生日志,用 Graylog 收集威胁事件日志并进行管理分析,可以低成本的完成威胁事件分析检测系统,本文的重点还在于日志收集的实践,检测规则的创建为辅助说明手段。

Suricata 经过多年发展沉淀了很多有价值的威胁检测规则策略,当然误报的情况也是存在的,但可能通过手动干预修改 Surcicata 的规则,通过日志分析后,迭代式的修改规则,让系统随着时间生长更完善,社区也提供了可视化的规则管理方案,通过后台管理方式管理 Suricata 检测规则,规则编辑本文只是简单介绍。Scirius 就是一种以 Web 界面方式的 Suricata 规则管理工具,可视化 Web 操作方式进行管理 Suricata 规则管理。

回正体,对于整个威胁事件日志收集系统最主要的三个部分(重点前两个):

1. Suricata:流量的威胁事件日志输出。

2. Graylog:威胁事件日志聚合与分析。

3. Scirius:流量的威胁检测规则管理。

Scirius 的是可视化的检测规则管理工具,也可采用手动直接添加编辑修改规则文件来完成检查规则的变更。

2.4 周边工具生态

2.4.1 LUA 脚本语言控制

Lua 是一种脚本语言,语法简单但功能强大。Suricata 提供 Lua 脚本操作数据的处理机制。Suricata 配置文件中提供 Lua 脚本执行设置。系统以回调形式调用用户设置的 Lua 脚本,并将特定的数据传递给 Lua 脚本,让用户通过 Lua 脚本做更细致的数据分析工作。可以 Lua 脚本中按提定的策略去过滤数据,在脚本中通过 soker 发送 UDP 报文数据给 Graylog 创建的 Syslog 日志数据监听,由 Graylog 收集聚合日志,进行数据分析可视化展示,让整本系统功能更完整,为了更简便的收集日志,我们使用了更集成化日志收集工具 nxlog。

2.4.2 开源情报。

在威胁情报是用于威胁分析强用力工具,OTX 是一种开源威胁情报,OTX 周边提供各种威胁情报工具,Graylog 本身提供 OTX 威胁情报插件,Graylog 可在收集日志同时,将含有 IP 和域名的数据字段与威胁情报进行匹配,如果发现威胁,会产生新的字段用于描述具体的威胁情报内容供安全人员参考。

0x03  Suricata的工作模式与日志分类

Suricata 有多种日志发类内容输出,本篇重点关注 Suricata 中的几种日志数据,其中的一个重点日志数据是 HTTP 数据,如上所述,Suricata 提供给用户可执行 Lua 脚本的配置,让用户通过 Lua 脚本取得 HTTP 数据,也可以通过 NxLog 这种工具全量的收集 HTTP 日志,最后做分析,这次主要讲的是后者。

3.1 Suricata的三种运行方式:

线程、线程模块、队列,可以参三种元素进行不同的组合。

3.2 Surciata的事件日志收集

Suricata 的三种日志类型:事件日志、告警日志、 HTTP 流量日志,本文重点关注的日志是这三种类型的日志。

为了跟踪分析 Suricata 的事件日志,将 Suricata 的日志推送给 Graylog 创建的 Syslog 监听服务,将 Suricata 生成的 eve.json 日志的文件,经过 Graylog 的处理,保存到 ElasticSearch 中,Graylog 可以设置 Graylog 保存到 ES 中的日志数据的存活周期。

数据保存到 ES 数据库中后,可以任意选取一周时间范围的数据进行分析,Suricata 的 eye.json 日志格式是标准 JSON 格式,这种格式的数据,发送给 Graylog 之后,Graylog 可以实时的通过 extractor 功能按:分隔符、GROK、正则表达式等规则对数据进行格式化,按标准 JSON 形式分割 JSON 数据,按照 Key、Value 的方式解开 Json 数据,用 KEY 当作字段名,用 VALUE 作值,存到 ES 数据库的索引当中。

3.3 Graylog支持的数据监听格式

Graylog 支持多种的数据监听模式,最典型的是 UDP Syslog 监听。以外还有:TCP syslog、UDP syslog、Kafka、HTTP、NetFlow UDP 等。

3.4 Graylog支持的数据解析格式

Graylog 与一般日志采集系统不同之处,在于 Graylog 可数据收集到服产以后,在服务器端进行数据的分割,也同时提供的多种数据分割方式:GROK、正则、Lookup、分割符、等多种形式数据格式化手段,让数据的字段的切割创建非常的便利。

3.5 NxLog数据采集客户端

Suricata 支持 Syslog 格式日志输出,方便取得 Suricata 主机服务器上的日志文件,安装日志收集工具 nxlog,nxlog 可以将指定目录的下文件进行读取,然后将读取的内容以 Syslog 协议形式发送给 Syslog 监听服务,可以是 Syslog-NG,也可以是 Graylog。

Graylog 事件日志管理系统,提供了数据的转发输出功能,提供事件日志查询功能,通过数所转发功能,将 Syslog 监听接收的日志数据数据转发给 Kafka 队列,然后由消费者程序,消费数据进行分析处理, 数据量小的时候 Graylog 本身可完成实时数据分析,如果是大规模的数据,可以考虑用 Graylog 作数据中转,将数据传给 Kafaka,消费数据发送给 Clickhouse 进行更大规模的日志数据分析。

0x04 分解与聚合系统的工作流程

4.1 流量事件分析处理流程图

最终可以通过 Graylog 的 Dashboard 功能,对 Suricata 事件日志进行可视化展示,整体的工作过程简单的概括:Suricata 进行入侵检测分析产生日志,NxLog 采集 Suricata 日志并转发 Syslog 数据给 Graylog,Graylog 对日志收集格式化存 ES 并进行统计,在 Dashboard 展现。如果觉得 Graylog 本向的 Dashboard 不够理想可以用 Kibana、Granfana 这种工具来完成展示。

用一张图来描述系统架构工作流程,如下。

b530ef29dfa8d6e2844f0f4c022297fc.png

Suricata 流量分析过程:

4.11 流量镜像:

Suricata 可以监听聚合流量,如:网用户流量聚合,用类似交换机工作原理的网络镜像设备,将某一网络区域中集体用户的网络流量汇聚,转发给拥有多台网卡的服务,再用 Suricata 进行聚合流量的分析,单纯的本地实验,监听本地网卡的网口即可,缺点是流量有限,威胁事件与生成日志有限。

4.12 规则定义:

用户创建 Suricata 自定义检测规则,对流量中符合某些特征的数据进行过滤,如下:

alert http any any -> any any (msg:"hit baidu.com...";content:"baidu"; reference:url, www.baidu.com;)

在 HTTP 协议流量当中,URL 数据是www.baidu.com,含有 baidu 字符数据,就给出告警。

实验命中这条规则,在命令行输入:

curl www.baidu.com

会触发在 Suricata 的告警日志、HTTP 日志中产生相当记录,如下:

251aee189b5a63fba650eb46cd18a77a.png

Suricata 告警日志 (fast.log)

676d825607742a53ef42f0f924c4ec42.png

Suricata HTTP 事件日志 (http.log)

e0c3e6bc1dd9da421fa77dd563156196.png

Suricata 事件日志 (eve.log)

一条规则命中,产生三种日志都被 Graylog 收集到,这就达到了我们日志采集的目的。

4.2 Suricata日志生成配置:

Suicata 提供多种日志的保存,有默认打开,有不是默认的,比如 HTTP 日志并不默认生成日志。

日志配置文件是 suricata.yaml,通过修改 suricata.yaml,打开 http 日志监听,suricata.yam 截取 HTTP 配置,如下:

- http-log:
      enabled: yes
      filename: http.log
      append: yes
      extended: yes     # enable this for extended logging information
      custom: yes       # enabled the custom logging format (defined by customformat)
      customformat: "%{%D-%H:%M:%S}t.%z %{X-Forwarded-For}i %H %m %h %u %s %B %a:%p -> %A:%P"
      filetype: regular # 'regular', 'unix_stream' or 'unix_dgram'

默认的日志输出文件名就是 http.log。其中的 cursomformat 选项对于收集 HTTP 的日志格式化有帮助,通过这个选线自定义日志输出格式,便于 Graylog 后期切割。

4.3 Graylog快速安装

企业级的 Graylog 部署相对比较麻烦,为了便于实验,我们采用 Docker 的方式安装 Graylog 系统,以及 Graylog 系统所依赖的 Mongodb、ElasticSearch 等相关组件。

$ yum install docker
$ yum install docker-compose
$ docker run --name mongo -d mongo:3
$ docker run --name elasticsearch \
    -e "http.host=0.0.0.0" \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -d docker.elastic.co/elasticsearch/elasticsearch-oss:6.8.5
$ docker run --name graylog --link mongo --link elasticsearch \
    -p 9000:9000 -p 12201:12201 -p 1514:1514 \
    -e GRAYLOG_HTTP_EXTERNAL_URI="http://127.0.0.1:9000/" \
    -d graylog/graylog:3.3

下面是 Graylog 最小化安装的系统构成图。

6b158b827f0dddc58680c8da5e731702.png

Graylog 基于 MongoDB 维护管理用户配置信息,将 Stream、Input 等些配置数据以 JSON 的形式都保存到了 MongoDB 中进行数据的持久化保存,用 ElasticSearch 单结点,或是集群来保存收集过来的日志,并提供了 REST API 供用户脚本进行查询,用户可通过 WEB 界面来完成直接完成基的日志的审计工作,也可以用 REST API 的脚本实时批量化自动化的完成数据审计。

Input 数据监听是 Graylog 基础概念,Graylog 提供用户界面,用户自己创建各种协议格式的网络数据监听,Graylog 是一个 Java 信息系统,比如,我们为了配合 Nxlog 的事件日志收集,创建三个 UDP Syslog 网络监听接受 Nxlog 发送的日志,创建监听,如下:

5e31208faa13b71139c788836f412483.png

Nxlog 本身可做系统检查分析,生成各种系统的事件数据的日志文件,我们利用 Nxlog 多种功能中的一个日志文件变更监听转发,但本身她不简单只这一个功能。

这个实验 Nxlog 的配置文件的完整内容,文件本身很简明的概括了对 Suricata 日志收集的逻辑关系。

1: 1 windows (created Tue Aug 18 17:16:36 2020) [178x51]
## This is a sample configuration file. See the nxlog reference manual about the
## configuration options. It should be installed locally under
## /usr/share/doc/nxlog-ce/ and is also available online at
## http://nxlog.org/docs
########################################
# Global directives                    #
########################################
User nxlog
Group nxlog
LogFile /var/log/nxlog/nxlog.log
LogLevel INFO
########################################
# Modules                              #
########################################
    Module      xm_syslog
    Module      im_file
    File        "/usr/local/suricata-4.0.3/var/log/suricata/eve.json"
    Module      om_udp
    Host        10.X.X.X
    Port        19003
    Exec        parse_syslog();
    Module      im_file
    File        "/usr/local/suricata-4.0.3/var/log/suricata/fast.log"
    Module      om_udp
    Host        10.X.X.X
    Port        19002
    Exec        parse_syslog();
    Module      im_file
    File        "/usr/local/suricata-4.0.3/var/log/suricata/http.log"
    Module      om_udp
    Host        10.X.X.X
    Port        19001
    Exec        parse_syslog();
########################################
# Routes                               #
########################################
    Path         in => out
    Path         in1 => out1
    Path         in2 => out2

Nxlog 中输入输出的概念与 Graylog 日志收集的整体概念是类似的,对于 Suricata 的三种关键的日志文件进行了跟踪收集。

事件日志:日志采用的是 eve.json, 日志的格式内容也是按标准 JSON 格式保存的,非常的便于之后的数据切割。

/usr/local/suricata-4.0.3/var/log/suricata/eve.json

告警日志信息:我们之前创建了百度那条规则,如果当 Suricata 发现有对 Baidu 访问行为发生,就会在 fast.log 中进行记录。

/usr/local/suricata-4.0.3/var/log/suricata/fast.log"

HTTP 访问日志:Suricata 会监听指定网卡的访问行,发现有 HTTP 的访问行为就会进行记录。

/usr/local/suricata-4.0.3/var/log/suricata/http.log"

这里的 in 和 out 分别指的,输入文件和输出监听,输入是三个文件作为数据源,输出是指定要让日志内容发到的 Syslog 监听服务,通过 Route 来进行,各种个 Input 和 Output 之间关键,那个文件内容发送到那个 Syslog 日志监听中。


    Module      im_file
    File        "/usr/local/suricata-4.0.3/var/log/suricata/eve.json"

Module 指定了 im_file 这个模块,这个模块是告诉 Nxlog 数据源是从文件中来,而不是其他系统审计事件中取得。


    Module      om_udp
    Host        10.X.X.X
    Port        19003
    Exec        parse_syslog();

Module 表示要使用是 nxlog 的什么功能,om_upd 就是进行日志的 UDP 数据转存。

Exec 表示按什么协议进行数据解析,我这里是使用 parse_syslog 进行格式的统一。


    Path         in => out

Route 指明了,那个文件的内容,要送的 UDP 发送给那台 Syslog 服务器的端口监听。

三个文件,分析对应三个网络监听 19001、19002、19003 这三个端口进行数据的收集。

4.4 事件日志存储周期管理:

日志经过事件管理系统 Graylog 处理后,被保存到了 ElasticSearch 数据库,Graylog 系统提供了 ElasticSearch 的 Index 索引管理能力,让安全人员可以快速的创建 ElasticSearch 索引,管理数据存在与销毁的时间周期。

比如,要统计一周的流量数据,需要设定最少 7 天的日志数据存活周期,到了 7 天以后 Graylog 会滚动销毁过期的日志数据,Graylog 提供的这个功能解放了过去的各种为了管理数据生存周期而写的脚本,大日志文件切割,文件命名规则再敢不用考虑了,完可视化自动配置完成。

4.5 事件日志统计分析:

经过部署流量监听服务,监听网卡的流量,并且通过自定义规则实现定制的检测策略,然后通过日志收集,对文本日志数据进行汇聚,保存到数据库,进行分析和关联摆脱了上各种服务写 AWK 脚本的尴尬。

下面是对三种数据进行实时统计:

4.5.1事件日志

威胁事件日志产生频率高,Suricatag 开起了大量的规则,符合规则的数据就会产生很多,下面是 Graylog 对 Suriata 的事件日志、告警日志、HTTP 日志的统计展现。

a.)事件日志。

0161786dc40a79e63838ab2628683492.png

我们通过 eye.json 的 event_type 进行分类统计统计出流量发生事件分布。

0c44617415995dc09ea78406ee891cc2.png

可以 7 天为一个周期单位,观察数据的变化。

a296beacb3946723437211d6bf90e228.png

而通过整个 eve.json 的数据进行各种分析,完成日常的审计工作。

b.)告警日志。

事件日志只是告诉我们发生了什么事件,威胁告警数据在 fast.log 中保存。

707a59850d52bdfa229bb3665e74a5c0.png

命中的规则就会相应审计日志产生,以是数据含有上面定义的那条关于 baidu 的规则产生的日志记录,访问百度,命中规则,产生数据。

下面系统的默认启动的规则与自定义夫规则两种数据。

ca06431f9f2abcba118bbae006ac38ec.png

外联威胁信息的日志,是系统原生的规则产生的数据。

fc40e2848d49977aa52db2cd8f01f7c4.png

有多种告警策略,对应有多少的告警事件信息,但需要在网络环境中发生这些事件,才可以生成日志。为了人为的产生数据,自定义了规则,模拟执行命中规则的操作,是为了让数据的产生可控,而不是等待事件的发生。

c.)HTTP 交通日志。

HTTP 作为 Suricata 一种缺省不打开的日志类型,如果我们内部网的 HTTP 流量都镜像到一个服务器,就可以监听对应网段的 HTTP 流量数据,以 baidu 规则为例,可以衍生出多种网站网址的过滤规则将认定的威胁规则化。

a564fc4de67b98cbb0dd3925f37870d9.png

基于流量镜像的 HTTP 日志记录,便于回溯很多的问题,在某些场景下,不需在每个想收集的 Nginx 服务器上做数据收集配置,只要流量镜像到一个点,就是可以完成日志收集工作,节省了大量的服务结点配置管理成本,依靠 Suricata 的丰富规则语义,完成我们想构建的安全检查策略。

1ad2808ae889d2b929baeea175687ee1.png

0x05 总结

Suricata 作为一款开源 IDS 系统,可对流量当中的威胁事件进行分析,Graylog 提供了威胁事件数据管理与数据分析功能,Nxlog 日志收集工具作为数据桥梁,将并本没有联系的系统进行了数据对接,联合完成了对网络中威胁事件的分析与统计。

关于 Suricata 的配置,Graylog 数据管理,以及周边相关数据生态工具还有很多,本案例总体上介绍了相关的内容,对于更多细节内,如关于 OTX 开源威胁情报插件、Graylog 数据管理、REST API 使用、ES 分片备份管理、LUA 脚本分析、可视化规则管理等内容后续展开介绍。

1fc94873263b85ed2b6a17b543df3497.gif


http://www.niftyadmin.cn/n/708102.html

相关文章

转载:Java实现的SFTP

2019独角兽企业重金招聘Python工程师标准>>> JSch - Java实现的SFTP(文件上传详解篇):https://www.cnblogs.com/longyg/archive/2012/06/25/2556576.html JSch - Java实现的SFTP(文件下载详解篇)&#xff1…

java中可视窗口_原生javasxript获取浏览器的滚动距离和可视窗口的高度

原生javasxript获取浏览器的滚动距离和可视窗口的高度//封装兼容性方法获取滚动的距离function getScrollOffset(){if(window.pageXOffset){return {x : window.pageXOffset,y : window.pageYOffset}}else{return {x : document.body.scrollLeft document.documentElement.scr…

设置CentOS6.5时钟同步

一、测试ntp服务 # rpm -q ntp ntp-4.2.4p8-2.el6.x86_64 // 这表示已安装了,如果没有安装,这是空白。 二、/etc/ntp.conf 红色部分是修改的。 配置文件修改完成,保存退出,启动服务。 service ntpd startntpstat 命令查看时间同…

依存句法分析器的简单实现

生成式句法分析指的是,生成一系列依存句法树,从它们中用特定算法挑出概率最大那一棵。句法分析中,生成模型的构建主要使用三类信息:词性信息、词汇信息和结构信息。前二类很好理解,而结构信息需要特殊语法标记&#xf…

java菱形三角形代码_java三角形和菱形的打印

一、三角形的打印package Test;import java.util.Scanner;public class Main {public void san(int num) {for(int i1;i<num;i) {//控制行数for (int j 1; j < num-i; j) {//控制空格的个数System.out.print(" ");}for(int k1;k<2*i-1;k) {//控制打印*Syst…

python定时器的使用_关于定时器的两种使用方法

在发现Python自身的API在这方面没有很好支持这种情况下&#xff0c;想要使用Timer功能的话&#xff0c;除了第三方的模块外&#xff0c;还可以通过使用标准库为我们提供的sched模块和Timer类。这两个类不能算是真正的Timer&#xff0c;只能算是用来现实Timer的工具类。 不论在客…

图片仓库

2019独角兽企业重金招聘Python工程师标准>>> 图片仓库 转载于:https://my.oschina.net/u/3099393/blog/798400

python 获取excel中的图表_使用Python将Excel中的图表导出为图像

我知道这是一个老问题&#xff0c;但它有助于我走上正确的轨道&#xff0c;所以我回来分享我完成的脚本&#xff0c;找到工作表中的所有图表&#xff0c;并将它们导出为.png。 上面的脚本可以工作&#xff0c;但是由于它只是复制工作表中的一个区域&#xff0c;所以您要依赖于正…