网络安全攻防实验

前置知识


Apache

Apache HTTP server,a free open-souce web server software.

核心概念和特点

  • HTTP 协议处理:旨在有效处理 HTTP 请求响应,支持 HTTP/1.1 并具有可用于 HTTP/2 的模块
  • 模块化:apache 主要优势之一是其模块化架构。功能可以通过模块进行扩展,定制化轻量服务器
  • 虚拟主机:支持基于 IP 和基于名称的虚拟主机,允许单个服务器托管多个网站
  • 安全功能:包括对 SSL/TLS 加密,身份验证机制和访问控制的支持
  • configure:使用纯文本配置文件,主要是 httpd.conf 进行服务器设置,使用 .htaccess 进行目录级配置

模块

  • mod_auth_basic, mod_auth_digest :身份验证和授权模块,控制对资源的访问
  • mod_ssl :启用加密连接的 SSL/TLS 支持。
  • mod_proxy :提供正向和反向代理功能。
  • mod_rewrite :允许灵活的 URL 操作和重定向。
  • mod_deflate :在将内容发送到客户端之前对其进行压缩以节省带宽。
  • mod_cachemod_cache_diskmod_cache_socache :通过缓存经常访问的内容来提高性能。

配置 apache HTTP server

  • 目录结构

    • 主配置文件: /etc/apache2/apache2.conf
    • 默认站点配置: /etc/apache2/sites-available/000-default.conf
    • 模块目录: /etc/apache2/mods-available//etc/apache2/mods-enabled/
    • 文档根目录: /var/www/html/
  • 启用模块

    • sudo a2enmod module_name
    • sudo systemctl restart apache2
  • Virtual Hosts

    创建一个新的配置文件:/etc/apache2/sites-available/psych.green.conf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <VirtualHost *:80>
    ServerName psych.green
    DocumentRoot /var/www/psych.green/public_html

    <Directory /var/www/psych.green/public_html>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/psych.green_error.log
    CustomLog ${APACHE_LOG_DIR}/psych.green_access.log combined
    </VirtualHost>
  • 使用 FastCGI(一种允许 Web 服务器与外部应用程序(如 PHP 脚本)交互以生成动态内容的协议)和PHP-FPM(进程管理器,管理 PHP 进程并允许 Apache 通过 FastCGI 与 PHP 脚本进行通信)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <VirtualHost *:80>
    ServerName psych.green
    DocumentRoot /var/www/psych.green/

    <FilesMatch \\.php$>
    SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"
    </FilesMatch>

    # Other configurations
    </VirtualHost>
  • .htccess —— 提供目录级配置覆盖。

    • URL 重写(使用mod_rewrite)
    • 访问控制

    在 Apache 中启用 .htaccess

    1
    2
    3
    <Directory /var/www/psych.green/public_html>
    AllowOverride All
    </Directory>

实验一 - TLS 配置与流量分析


实验内容

  • 配置 TLS 协议分析环境
  • 配置 apache 服务器的 https 协议
  • 对指定域名发起 HTTPS 请求,抓包分析 TLS 协议流程、提取其中的关键信息

实验原理

TLS 协议

网络安全协议概览

image-20241028173745943

TLS协议主要用于网络通信中的数据加密、完整性验证身份认证,通常应用于HTTPS、电子邮件、即时通讯等需要保护数据安全的场景。TLS主要由三部分组成:记录协议握手协议警报协议

主要概念:

  • 加密算法

    包括对称加密(如AES)、非对称加密(如RSA)和哈希函数(如SHA-256)。对称加密用于数据加密,非对称加密用于身份认证和密钥交换,哈希函数用于数据完整性验证。

  • 数字证书

    数字证书包含服务器的公钥及身份信息,由受信任的CA(证书颁发机构)签发。客户端通过验证服务器证书来确定服务器的真实性。

  • 密钥交换

    TLS1.3之前通常使用 RSA 和 Diffie-Hellman 算法。TLS1.3 采用了更高效的密钥交换算法如 ECDHE(椭圆曲线Diffie-Hellman)。

OpenSSL

一个强大的开源工具包,支持 TLS 和 SSL 协议的实现及加密功能,包括加密、解密、数字证书的生成和管理。它广泛应用于网络服务器(如Nginx、Apache)和客户端程序,用于保护数据的传输安全。

Diffie-Hellman(DH)

  • Diffie-Hellman 密钥交换

    • DH 是一种加密协议,允许双方在公开信道上安全地生成共享密钥。这个密钥可以用于后续的加密通信。
  • 安全性

    • DH 协议的安全性基于离散对数问题的困难性,使得即使攻击者能够监听通信,也无法轻易推算出共享密钥。
    • 在 TLS 配置中使用 DH 参数可以增强服务器的安全性,特别是在使用前向保密(Perfect Forward Secrecy, PFS)时。
  • 支持多种加密套件

    • 一些 TLS 加密套件依赖于 DH 参数来进行密钥交换,因此生成这些参数是安全配置的一部分。

实验内容

环境配置

  1. 基本信息

    • 主机:windows,安装 wireshark 抓包
    • 虚拟机:Ubuntu,与主机网络连通
  2. Ubuntu 配置 apache 服务器的 HTTPS

    • 创建证书,密钥等

      image-20241028173734815
    • 创建一个强的 DH 群以增强服务安全性:sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

    • 安装 apache

    • 创建 apache 配置文件,并进行强加密设置

      • 在 /etc/apache2/conf-available 下创建 ssl-params.conf
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      # from <https://cipherli.st/>
      # and <https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html>
      SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
      SSLProtocol All -SSLv2 -SSLv3
      SSLHonorCipherOrder On

      # Disable preloading HSTS for now. You can use the commented out header line that includes
      # the "preload" directive if you understand the implications.
      # Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
      Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains"
      Header always set X-Frame-Options DENY
      Header always set X-Content-Type-Options nosniff

      # Requires Apache >= 2.4
      SSLCompression off
      SSLSessionTickets Off
      SSLUseStapling on
      SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
      SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"
    • 修改默认的 Apache SSL 虚拟主机文件 /etc/apache2/sites-available/default-ssl.conf 包括 Email & Domain、SSLCertificateFile、BrowserMatch

    • 为了更好的安全性,通常也推荐设置为自动重定向 http 访问到 https 访问:修改配置文件 /etc/apache2/sites-available/000-default.conf 加入一个 Redirect 指令来指向 SSL 版本的站点

      1
      2
      3
      4
      5
      <VirtualHost *:80>
      . . .
      Redirect "/" "https://your_domain_or_IP/"
      . . .
      </VirtualHost>
    • 使模块 mod_ssl、mod_headers(配置文件中某些设置需要)生效:sudo a2enmod ssl; sudo a2enmod headers

    • 使 SSL 虚拟主机生效:sudo a2ensite default-ssl

    • 使 ssl-params.conf 生效:sudo a2enconf ssl-params

    • 检查:sudo apache2ctl configtest

    • 重启:sudo systemctl restart apache2

  3. TLS 流量分析

主机打开 wireshark,设置过滤器为 ssl (仅对 TLS 协议数据分析)。

注意这里的坑是:加了代理之后主机设置了 hosts 也没办法正确重定向到局域网ip,需要关闭代理。。。

设置过滤器为 ssl

image-20241028173829849

按照TLS协议的流程,捕获的消息包含如下内容:

  1. ClientHello

    客户端向服务器发送ClientHello消息,包括TLS版本、支持的加密套件、随机数以及支持的扩展列表。它是 TLS 握手的起始点。

  2. ServerHello

    服务器回应ClientHello,选择一个加密套件并确认TLS版本。同时,服务器发送自己的随机数和扩展列表,确定接下来的通信参数。

  3. ChangeCipherSpec

    服务器和客户端会分别发送ChangeCipherSpec消息,通知对方接下来的通信内容将使用协商的加密算法和密钥进行加密。

  4. Application Data应用数据

    握手完成后,服务器和客户端可以开始发送加密的应用数据。这些数据通过对称加密加密,因此无法直接查看内容。

实验二 - WPA-PSK 口令攻击