第四届网鼎杯半决赛应急加固
Werqy3 发表于 湖南 CTF 216浏览 · 2024-11-23 13:59

加固修复-01

加强SSH服务的安全性
为了防止SSH服务被暴力破解攻击,应禁用密码登录并改用密钥认证。
请在Linux服务器上为root用户配置以下公钥以进行验证ssh-ed25519 
AAAAC3NzaC1lZDI1NTE5AAAAIEhw/9RBAh4qW36/LZXn80sLIZhq2hAJ7qY9KhzfJ3rW

输入history查看历史命令,发现有vim /etc/ssh/sshd_config的历史命令,这个正是禁用密码的那个文件
禁用密码:

PasswordAuthentication no

配置ssh公钥:编辑/.ssh/authorized_keys文件改下即可

加固修复-02

配置Nginx重定向和HSTS
配置Linux服务器的Nginx服务,将所有站点的HTTP请求重定向到HTTPS,并配置严格传输安全策略
HSTS),以确保客户端与服务器之间的通信安全。

配置Nginx

sudo apt update
sudo apt install nginx

配置HTTP到HTTPS的重定向

sudo vim /etc/nginx/sites-available/example.com

然后,在配置文件中添加以下内容来设置HTTP到HTTPS的重定向

server {
    listen 80;
    server_name example.com www.example.com;

    # 重定向到HTTPS
    return 301 https://$host$request_uri;
}

启用HSTS

server {
    listen 443 ssl;
    server_name example.com www.example.com;

    ssl_certificate /path/to/your/certificate.pem;
    ssl_certificate_key /path/to/your/certificate.key;

    # HSTS (to include all subdomains, use "includeSubDomains")
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    # 其他SSL配置...

    location / {
        try_files $uri $uri/ =404;
    }
}

加固修复-03

启用Web应用防火墙
Nginx服务的默认站点启用ModSecurity Web应用防火墙,并集成OWASP核心规则集CRS),以防御常
见的Web攻击和漏洞利用

安装ModSecurity和OWASP CRS

sudo apt install modsecurity libmodsecurity3
git clone https://github.com/coreruleset/coreruleset /usr/share/modsecurity-crs

配置ModSecurity以使用OWASP CRS规则集
编辑ModSecurity主配置文件
编辑ModSecurity的主配置文件/etc/modsecurity/modsecurity.conf-recommended,将其复制为modsecurity.conf:

sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

编辑modsecurity.conf文件

vim /etc/modsecurity/modsecurity.conf


SecRuleEngine On
SecRequestBodyAccess On
SecResponseBodyAccess On
SecDebugLog /var/log/modsecurity/debug.log
SecDebugLogLevel 3
SecAuditEngine RelevantOnly
SecAuditLogParts ABIJDEFHZ
SecAuditLogType Serial
SecAuditLog /var/log/modsecurity/audit.log
SecDataDir /tmp
SecTmpDir /tmp

配置OWASP CRS规则集
创建一个目录来存放OWASP CRS规则集,并将规则集文件链接到Nginx的配置目录中:

sudo mkdir -p /etc/nginx/modsecurity
sudo ln -s /usr/share/modsecurity-crs/crs-setup.conf.example /etc/nginx/modsecurity/crs-setup.conf
sudo ln -s /usr/share/modsecurity-crs/rules/ /etc/nginx/modsecurity/

配置Nginx以使用ModSecurity
编辑Nginx的默认站点配置文件,通常位于/etc/nginx/sites-available/default:

sudo nano /etc/nginx/sites-available/default

server {
    listen 80;
    server_name your_domain.com;

    # ModSecurity configuration
    include /etc/modsecurity/modsecurity.conf;
    include /etc/nginx/modsecurity/crs-setup.conf;
    include /etc/nginx/modsecurity/rules/*.conf;

    location / {
        # Your existing configuration
        proxy_pass http://your_backend;
        # Other settings...
    }
}

加固修复-04

加强防火墙策略
配置Linux服务器的防火墙,使其仅允许通过以下端口的访问:22/tcpSSH)、53/tcp和53/udp
DNS)、80/tcpHTTP)、443/tcpHTTPS)。
关闭其他不必要的端口,减少攻击面。

清除现有规则

sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X

允许特定端口

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

保存规则

sudo sh -c "iptables-save > /etc/iptables/rules.v4"

加固修复05

赛后学习的
优化Kubernetes RBAC权限 配置App1应用的Kubernetes RBAC权限,只允许读取App1应用命名空间下所有Pods的信息,防止越权访问 其他命名空间的资源。

需要创建一个Role和一个RoleBinding

创建Role

首先,定义一个Role,该角色允许在指定命名空间内对Pods执行get, list, 和 watch操作。假设你的应用程序位于名为app1-namespace的命名空间中。

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: app1-pod-reader
  namespace: app1-namespace  # 更改为你实际使用的命名空间名称
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]

保存上述内容到一个名为app1-role.yaml的文件中。

创建ServiceAccount

apiVersion: v1
kind: ServiceAccount
metadata:
  name: app1-service-account
  namespace: app1-namespace  # 确保与Role所在的命名空间一致

将这段代码保存为app1-serviceaccount.yaml

创建RoleBinding

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: app1-namespace  # 同样保持一致性
subjects:
- kind: ServiceAccount
  name: app1-service-account  # 使用正确的服务账号名称
  namespace: app1-namespace
roleRef:
  kind: Role
  name: app1-pod-reader
  apiGroup: rbac.authorization.k8s.io

此配置保存为app1-rolebinding.yaml

使用kubectl命令行工具应用这些配置

kubectl apply -f app1-role.yaml
kubectl apply -f app1-serviceaccount.yaml
kubectl apply -f app1-rolebinding.yaml

加固修复06

修复Kubernetes服务 使Pods状态为running,确保应用的可用性。

赛后学习的

检查Pod的状态

kubectl get pods -n <namespace>  # 列出指定命名空间下的所有Pods
kubectl describe pod <pod-name> -n <namespace>  # 获取特定Pod的详细信息

查看日志

kubectl logs <pod-name> -n <namespace>

Pod处于ImagePullBackOff状态

1.检查镜像名称和标签是否正确。
2.确保镜像存在于指定的仓库中,并且对集群可见(例如,私有仓库需要正确的认证信息)。
3.如果使用的是私有仓库,确保已经配置了imagePullSecrets

Pod处于Pending状态

增加节点数量或调整现有节点的资源分配。
调整Pod的资源请求(requests)和限制(limits),使其与可用资源匹配

resources:
  requests:
    memory: "64Mi"
    cpu: "250m"
  limits:
    memory: "128Mi"
    cpu: "500m"

重新创建Pod

删除Pod让控制器自动重新创建它

kubectl delete pod <pod-name> -n <namespace>
0 条评论
某人
表情
可输入 255