今年我的目标之一就是改进我的基础设施日志管理程序。直到最近,我的日志管理技术还是打开了一些终端标签,将SSH连接到我的所有基础架构资产中,然后捕获并查看我感兴趣的日志文件。显而易见,这不是特别高效,但我却满足于此,直到我看到Jeff Dimmock和Steve Borosh写的这篇伟大的博客文章。突然间,我的基础设施日志管理专业知识显得非常不足,我头脑中有个小小声音不停地呼唤我,要我做些什么。
这篇博客文章系列将成为设置集中式基础设施日志的指南。这是一个涵盖内容非常多的话题,所以我不能涵盖它所带来的一切(加上我自己也很菜),但它应该为任何希望设置类似内容的人提供一个很好的参考。
基础设施攻击日志记录系列:
第1部分: 日志服务器
第2部分:日志聚合
第3部分:Graylog仪表板
第4部分:日志事件警报
在本系列的最后,我们最终会看到如下所示的日志记录设置:
说实话,典型的为期2周的合规性渗透测试不需要在基础设施的设置或管理日志多花费精力。但是,如果您为长期参与(几个月甚至几年)建立基础架构,则应考虑投入更多时间来设置集中式日志记录,原因如下:
运营监督 - 集中式日志记录让您可以用上帝视角查看正在进行的操作; 成功的钓鱼,有效载荷下载,潜在的事件响应活动,对您的资产的攻击等等。有了这种疏忽,您可以立即响应事件,甚至可以随时调整您的策略,例如说您的日志警报告诉您,您的有效负载在过去8小时内已下载了10次,并且您还没有收到单个外壳; 这在下次团队会议中肯定会引起一些警示。
报告 - 一份良好的日志会提高报告的质量。我敢肯定,大家都经历过因为没有截到一个关键性的截图而感到愧疚的经历。
便利性和效率 - 监控来自多个基础设施资产的日志是很痛苦的事情。配置了定制快速统计和dashboard可以节省大量时间和精力。
问责制 - 可以知道并证明您负责的活动。可以避免互相甩锅的尴尬局面~
安全 - 互联网黑暗而充满恐怖。蓝色团队可是监视他们的基础设施日志中是否存在异常情况和恶意活动迹象,这至少可以让人安心一点。
Graylog2:
我会用的 Graylog 2作为集中整个系列博客日志服务器,但我要指出,PLENTY也是一个很好的选择。我根据下面列出的原因选择了Graylog,但同学们也可以随时尝试其他日志管理解决方案:
所以我打算设置一个全新的Graylog日志记录服务器。
1.服务器要求:
Graylog有几个安装条件,我将注意介绍。一个作为日志记录服务器本身,我建议一些有至少4GB的RAM 舒适的操作体验; Graylog建立在ElasticSearch之上,仅需要2GB的RAM即可运行。Graylog的文档涵盖了各种操作系统风格的安装。我将使用新的Debian 9 系统。
2.安装环境:
Graylog具有以下安装环境:
Java(> = 8)
MongoDB(> = 2.4)
Elasticsearch(> = 2.x)
让我们安装它们:
#Java sudo apt update && sudo apt upgrade sudo apt install apt-transport-https openjdk-8-jre-headless uuid-runtime pwgen #MongoDB sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 - -recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5 echo“deb http://repo.mongodb.org/apt/debian jessie / mongodb-org / 3.6 main”| sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list sudo apt-get update && sudo apt-get install -y dirmngr mongodb-org
注:如果安装MongoDB失败,你可能需要安装libssl1.0.0软件包。随后将Debian的jessie-backports添加到您的/etc/apt/sources.list中:
#Jessie backports deb http://ftp.debian.org/debian jessie-backports main
或者你可以自己下载并安装缺失的安装环境。
下一个安装的是ElasticSearch。
#Elasticsearch wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - echo“deb https://artifacts.elastic.co/packages/5.x/apt stable main”| sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list sudo apt-get update && sudo apt-get install elasticsearch
安装ElasticSearch后,您需要修改ElasticSearch配置文件(/etc/elasticsearch/elasticsearch.yml); 取消注释cluster.name设置并将其命名为graylog。
最后,开启所有必需的服务并重新启动它们。
sudo systemctl daemon-reload sudo systemctl enable mongod.service elasticsearch.service sudo systemctl restart mongod.service elasticsearch.service
3.安装Graylog2:
Graylog提供DEB和RPM包存储库。
wget https://packages.graylog2.org/repo/packages/graylog-2.4-repository_latest.deb sudo dpkg -i graylog-2.4-repository_latest.deb sudo apt-get update sudo apt-get install graylog-server
4.配置Graylog2:
所有Graylog的配置都是从单个文件管理的; /etc/graylog/server/server.conf。在我们登录到Graylog的Web管理门户之前,我们需要更改其中的一些设置。
在我进行下一步操作之前,我总是备份配置文件;因为你永远不知道什么时候需要重新开始= =。
sudo cp /etc/graylog/server/server.conf /etc/graylog/server/server.conf.bak
I)管理员用户名:
如果你想更改管理员的用户名,默认是“ admin ”。
root_username = admin
II) password_secret:
你必须为密码加密和腌制设置密钥。如果没有设置,Graylog将拒绝启动。这不会是你的登录密码。
首先,使用pwgen实用程序生成加密密码(至少64个字符长):
pwgen -N 1 -s 96
将整个字符串粘贴到password_secret设置中:
III) root_password_sha2:
接下来,你需要生成密码的SHA2哈希值,你将在初次登录到Graylog的Web界面时使用该密码。你可以在首次登录后从仪表板更改它。
生成管理员帐户密码的SHA2哈希值:
echo -n yourpassword | sha256sum
将散列粘贴到root_password_sha2设置中:
root_password_sha2 = PASSWORD_HASH
IV) Web listening port:
最后,如果想使用默认9000以外的任何其他端口,则应启用Web界面并更改其监听端口。取消注释下面的行并更改它们以匹配您希望可以访问的任何端口Graylog的Web界面:
rest_listen_uri = http://0.0.0.0:9000/api/ web_listen_uri = http://0.0.0.0:9000/api/
现在,只需启用并重新启动Graylog服务即可。
sudo systemctl守护进程重新加载 sudo systemctl启用graylog-server.service sudo服务graylog-server restart
登录到你的Web管理门户http:// [IP_ADDRESS]:9000 /
重要提示:下一步是可选的,但我强烈建议不要跳过它。Graylog的Web界面和REST API默认使用HTTP,这意味着你的密码和其他敏感数据通过电缆以明文形式发送。下一步包括为你的Graylog安装生成并添加一个自签名HTTPS证书。
IV) 安装自签名证书:
创建一个文件夹来管理你的证书:
sudo mkdir / etc / graylog / server / ssl cd / etc / graylog / server / ssl
在其中创建文件“ openssl-graylog.cnf ”并填写下面的内容; 定制它以满足您的需求:
[req] distinguished_name = req_distinguished_name x509_extensions = v3_req prompt = no #有关证书颁发者的详细信息 [req_distinguished_name] C = US ST = NY L = NY O = Graylog OU = Graylog CN = logger.graylog.com [v3_req] keyUsage = keyEncipherment,dataEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names #证书应包含的IP地址和DNS名称#IP 地址和DNS的 IP地址### DNS名称的 ###,“###”是连续的数。 [alt_names] IP.1 = 127.0.0.1 DNS.1 = logger.graylog.com
注: 请确保将配置文件中的'IP.1 = 127.0.0.1'值更改为您的Graylog服务器的IP地址。
创建一个PKCS#5私钥(PKCS5-plain.pem)和X.509证书(graylog。CRT):
sudo openssl req -x509 -days 365 -nodes -newkey rsa:2048 -config openssl-graylog.cnf -keyout pkcs5-plain.pem -out graylog.crt
你的PKCS#5私钥到未加密的 PKCS#8私钥(graylog。键):
sudo openssl pkcs8 -in pkcs5-plain.pem -topk8 -nocrypt -out graylog.key
当使用HTTPS的Graylog REST API,X.509证书(graylog,CRT在这种情况下) 必须信任由JVM信任存储,否则通信将失败。由于我们不想与官方信任存储库混淆,因此我们将制作一份我们将与我们的Graylog证书一起使用的副本。
udo cp -a / usr / lib / jvm / java-8-openjdk-amd64 / jre / lib / security / cacerts / etc / graylog / server / ssl / sudo keytool -importcert -keystore / etc / graylog / server / ssl / cacerts -storepass changeit -alias graylog-self-signed -file /etc/graylog/server/ssl/graylog.crt
证书现在应该可以使用了。编辑Graylog的配置文件(/etc/graylog/server/server.conf)并找到并更改下面的设置:
#REST API设置 rest_enable_tls = true rest_tls_cert_file = /etc/graylog/server/ssl/graylog.crt rest_tls_key_file = /etc/graylog/server/ssl/graylog.key #Web界面设置 web_enable_tls = true web_tls_cert_file = / etc / graylog / server /ssl/graylog.crt web_tls_key_file = /etc/graylog/server/ssl/graylog.key
注:对于运行Graylog进程的系统用户,证书和密钥文件需要可读(644权限对两个文件均可正常工作)。
我们完成了!只需重新启动Graylog,并且您应该能够通过https:// [IP_ADDRESS]登录到您的管理控制台:9000 /
sudo服务graylog-server重启
如果您有任何登录问题,请参阅Graylog2的HTTPS安装文档和Graylog的日志文件(/var/log/graylog-server/server.log)以进行故障排除。
如果你已经掌握了这么多,你可以说安装Graylog可能有点过程,特别是如果你是为每次参与启动新的基础架构的话。我编写了一个脚本来自动执行上述所有安装步骤。
安装依赖关系
安装Graylog
配置HTTPS
您应该了解将来自攻击基础架构的所有日志集中在一个地方的风险。您汇总的日志越多,日志服务器携带的风险就越高; 一个妥协可能会暴露你的整个操作。
下表显示了Graylog的默认侦听端口:
服务 | 港口 |
---|---|
Graylog Web Interface和REST API | 9000 |
Graylog到ElasticSearch | 9200 |
ElasticSearch节点通信 | 9300 |
MongoDB的 | 27017 |
一些简单的防火墙规则可以保护您的Graylog安装,特别是如果您使用VPN服务器来控制对攻击基础架构的管理端口的访问时,可以发挥很大的作用。
以下是一些iptables规则示例,您可以将其应用于您的Graylog服务器以限制其攻击面。
#默认策略 -P INPUT DROP -P FORWARD DROP -P OUTPUT ACCEPT #允许建立连接 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #允许来自本地环回接口的流量 -A INPUT -i lo - j ACCEPT #仅允许来自特定IP地址的SSH连接,例如VPN -A INPUT -s [ VPN_IP_ADDRESS ] / 32 -p tcp -m tcp --dport 22 -j接受 #仅允许从特定IP地址连接到Graylog管理,例如VPN -A INPUT -s [ VPN_IP_ADDRESS ] / 32 -p tcp -m tcp --dport 9000 -j ACCEPT #仅允许来自攻击基础架构资产的Rsyslog通信(1行每个资产) -A INPUT -s [ ASSET_IP_ADDRESS ] / 32 -p tcp -m tcp --dport 5140 -j ACCEPT -A INPUT -s [ ASSET_IP_ADDRESS] / 32 -p tcp -m tcp --dport 5140 -j ACCEPT -A INPUT -s [ ASSET_IP_ADDRESS ] / 32 -p tcp -m tcp --dport 5140 -j ACCEPT -A INPUT -s [ ASSET_IP_ADDRESS ] / 32 - p tcp -m tcp --dport 5140 -j ACCEPT
注意:上述规则集的最后一部分将在下一篇文章中更有意义。
我们的日志记录服务器已启动并正在运行,下一篇文章将介绍如何从各种基础架构资产中设置日志的汇总。
https://github.com/bluscreenofjeff/Red-Team-Infrastructure-Wiki
https://bluescreenofjeff.com/2017-08-08-attack-infrastructure-log-aggregation-and-monitoring/
https://www.contextis.com/blog/logging-like-a-lumberjack
http://docs.graylog.org/en/2.4/index.html
http://docs.graylog.org/en/2.4/pages/configuration/server.conf.html
http://docs.graylog.org/en/2.4/pages/configuration/file_location.html#default-file-location
https://ashleyhindle.com/how-to-setup-graylog2-and-get-logs-into-it/
https://dodizzle.wordpress.com/2011/10/14/3-ways-to-push-data-to-graylog2/