• Snort搭建以及规则编写


    目录

    Snort IDS

    Snort搭建

    安装web服务,方便设置sonrt后期访问

    Mysql安装

    PHP安装 

    安装 Snort

    Snort配置

    创建snort专用的用户和组

    配置目录

    配置规则

    修改配置文件

    规则编写


    Snort IDS

    Snort IDS(入侵检测系统)是一个强大的网络入侵检测系统。它具有实时数据流量分析和记录IP网络数据包的能力,能够进行协议分析,对网络数据包内容进行搜索/匹配。它能够检测各种不同的攻击方式,对攻击进行实时报警。此外,Snort是开源的入侵检测系统,并具有很好的扩展性和可移植性。

    Snort搭建

    环境:centos

    安装web服务,方便设置sonrt后期访问

    1. #apache
    2. yum install httpd httpd-devel
    3. #启动ahache
    4. systemctl start httpd
    5. #设置开机自启
    6. systemctal enable httpd
    7. #防火墙设置开启80端口
    8. firewall-cmd --permanent --zone=public --add-service=http
    9. firewall-cmd --permanent --zone=public --add-service=https
    10. firewall-cmd --reload
    11. #查看80端口
    12. yum install lsof
    13. lsof -i:80

    Mysql安装

    1. yum install wget (若是自带wget就不必安装了)
    2. wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
    3. #安装mysql-com/mysql-community-release-el7-5.noarch.rpm包
    4. rpm -ivh mysql-community-release-el7-5.noarch.rpm
    5. #安装完成后会在/etc/yum.repos.d/目录下新增mysql-community.repo 、mysql-community-source.repo 两个 yum 源文件。
    6. #进入/etc/yum.repos.d/安装mysql
    7. yum install mysql-server
    8. #检查是否安装成功
    9. rpm -qa | grep mysql
    10. #启动mysql服务
    11. systemctl start mysqld.service
    12. systemctl enable mysqld.service
    13. #mysql 安全设置
    14. mysql_secure_installation

    PHP安装 

    1. yum install php
    2. yum install php-mysql
    3. yum install -y php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap
    4. ##安装php后重启apache使其生效
    5. systemctl restart httpd.service
    6. #测试php,在网站根目录/var/www/html/下新建 index.php 文件
    7. 写入:
    8. 访问ip/index.php ,出现phpinfo界面说明安装完成

    安装 Snort

    安装依赖

    1. yum install gcc flex bison zlib zlib-devel libpcap libpcap-devel pcre pcre-devel libdnet libdnet-devel tcpdump
    2. yum -y install epel-release
    3. yum -y install nghttp2

     安装daq和snort

    记得下载到对应的目录下,别下乱了

    1. wget https://www.snort.org/downloads/snort/daq-2.0.7.tar.gz
    2. wget https://www.snort.org/downloads/snort/snort-2.9.20.tar.gz

     

     下载好后进入目录解压编译

    对daq进行编译

    1. tar -xvzf daq-2.0.7.tar.gz
    2. cd daq-2.0.7
    3. ./configure
    4. make
    5. make install

    回到上级目录下载LuaJIT库,并编译

    1. cd ..
    2. wget https://luajit.org/download/LuaJIT-2.1.0-beta3.tar.gz
    3. #解压
    4. tar -xvzf LuaJIT-2.1.0-beta3.tar.gz
    5. #进入src目录
    6. cd LuaJIT-2.1.0-beta3/src
    7. make
    8. #接着到src上层目录进行make install
    9. cd ..
    10. make install

    下载 openssl依赖

    1. yum install openssl
    2. yum install openssl-devel

     对snort进行编译

    1. tar -xvzf snort-2.9.18.1.tar.gz
    2. cd snort-2.9.18.1
    3. ./configure --enable-sourcefire
    4. make
    5. make install

    查看安装的信息

    snort -V

    Snort配置

    创建snort专用的用户和组

    1. groupadd snort
    2. useradd snort -r -s /sbin/nologin -c SNORT_IDS -g snort

    配置目录

    IDS 模式运行时会创建一些目录,其中配置文件储存在 /etc/snort 中,规则储存在 /etc/snort/rules中,编译规则储存在 /usr/local/lib/snort_dynamicrules 中,日志粗存在 /var/log/snort 中

    1. #创建snort目录
    2. mkdir /etc/snort
    3. mkdir /etc/snort/rules
    4. mkdir /etc/snort/rules/iplists
    5. mkdir /etc/snort/preproc_rules
    6. mkdir /usr/local/lib/snort_dynamicrules
    7. mkdir /etc/snort/so_rules
    8. #创建储存规则文件
    9. touch /etc/snort/rules/iplists/black_list.rules
    10. touch /etc/snort/rules/iplists/white_list.rules
    11. touch /etc/snort/rules/local.rules
    12. touch /etc/snort/sid-msg.map
    13. #创建日志目录
    14. mkdir /var/log/snort
    15. mkdir /var/log/snort/archived_logs
    16. #修改文件权限
    17. chmod -R 5775 /etc/snort
    18. chmod -R 5775 /var/log/snort
    19. chmod -R 5775 /var/log/snort/archived_logs
    20. chmod -R 5775 /etc/snort/so_rules
    21. chmod -R 5775 /usr/local/lib/snort_dynamicrules
    22. #修改文件属主
    23. chown -R snort:snort /etc/snort
    24. chown -R snort:snort /var/log/snort
    25. chown -R snort:snort /usr/local/lib/snort_dynamicrules
    26. #将配置文件从源文件复制到/etc/snort/中
    27. cd /snort-2.9.18.1/etc/ # (进入snort安装目录,每个人可能不同)
    28. cp *.conf* /etc/snort
    29. cp *.map /etc/snort
    30. cp *.dtd /etc/snort
    31. cd /root/snort-2.9.18.1/src/dynamic-preprocessors/build/usr/local/lib/snort_dynamicpreprocessor
    32. cp * /usr/local/lib/snort_dynamicpreprocessor/

    配置规则

    我们使用官方给的免费的社区规则,如果有需要的话可以选择官方的其他套餐
    (社区套餐免费;注册即可领注册套餐;付费套餐)

    https://www.snort.org/downloads/community/community-rules.tar.gz

    解压,添加 

    1. tar -xvzf community-rules.tar.gz
    2. cp community-rules/* /etc/snort/rules/

    修改配置文件

    1. vim /etc/snort/snort.conf
    2. # 在45行附近 ipvar HOME_NET <any>修改为本机的内部网络
    3. ipvar HOME_NET <ip>.1/24

     通过 / 进行查询关键字即可找到位置

     

    1.  # 在104行附近 配置规则文件路径
    2. var RULE_PATH /etc/snort/rules
    3. var SO_RULE_PATH /etc/snort/so_rules
    4. var PREPROC_RULE_PATH /etc/snort/prepproc_rules
    5. var WHITE_LIST_PATH /etc/snort/rules/iplists
    6. var BLACK_LIST_PATH /etc/snort/rules/iplists

     

    1. #在515output unified2:....... 之后添加
    2. output unified2: filename snort.u2, limit 128

     

    1. #546行,取消注释local.rules文件,后面的 include 文件均注释掉
    2. include $RULE_PATH/local.rules

    保存,退出

    检查规则是否配置完成

    snort -T -c /etc/snort/snort.conf

     配置成功

    规则编写

    进入local.rules编写自定义规则

    vim /etc/snort/rules/local.rules

    此条规则的sid为1,任意ip的任意端口访问 192.168.171.130的80端口时

    提示 "A test guys" 

    alert tcp any any -> 192.168.171.130 80 (msg:"A test guys";sid:1)

     激活 snort 控制台检测流量,此处需要看一下自己的网卡,我的是ens32

    snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i ens32

     启动后尝试对目标进行访问

    查看snort监听这边,已经成功匹配记录下来

     

    规则详细使用

    规则选项

    1. msg - 在报警和包日志中打印一个消息。
    2. logto - 把包记录到用户指定的文件中而不是记录到标准输出。
    3. ttl - 检查ip头的ttl的值。
    4. tos 检查IP头中TOS字段的值。
    5. id - 检查ip头的分片id值。
    6. ipoption 查看IP选项字段的特定编码。
    7. fragbits 检查IP头的分段位。
    8. dsize - 检查包的净荷尺寸的值 。
    9. flags -检查tcp flags的值。
    10. seq - 检查tcp顺序号的值。
    11. ack - 检查tcp应答(acknowledgement)的值。
    12. window 测试TCP窗口域的特殊值。
    13. itype - 检查icmp type的值。
    14. icode - 检查icmp code的值。
    15. icmp_id - 检查ICMP ECHO ID的值。
    16. icmp_seq - 检查ICMP ECHO 顺序号的值。
    17. content - 在包的净荷中搜索指定的样式。
    18. content-list 在数据包载荷中搜索一个模式集合。
    19. offset - content选项的修饰符,设定开始搜索的位置 。
    20. depth - content选项的修饰符,设定搜索的最大深度。
    21. nocase - 指定对content字符串大小写不敏感。
    22. session - 记录指定会话的应用层信息的内容。
    23. rpc - 监视特定应用/进程调用的RPC服务。
    24. resp - 主动反应(切断连接等)。
    25. react - 响应动作(阻塞web站点)。
    26. reference - 外部攻击参考ids。
    27. sid - snort规则id
    28. rev - 规则版本号。
    29. classtype - 规则类别标识。
    30. priority - 规则优先级标识号。
    31. uricontent - 在数据包的URI部分搜索一个内容。
    32. tag - 规则的高级记录行为。
    33. ip_proto - IP头的协议字段值。
    34. sameip - 判定源IP和目的IP是否相等。
    35. stateless - 忽略刘状态的有效性。
    36. regex - 通配符模式匹配。
    37. distance - < distance - 强迫关系模式匹配所跳过的距离。
    38. within - 强迫关系模式匹配所在的范围。
    39. byte_test - 数字模式匹配。
    40. byte_jump - 数字模式测试和偏移量调整

    content

    查找匹配净荷中的内容,并触发响应,选项数据可以包含混合文本和二进制数据,二进制数据放在两个管道符号"||"之间,表示为字节码,需要通过十六进制的方式进行表示

    1. alert tcp any any -> any 139 (content:"|5c 00|p|00|I|00|P|00|E|00 5c|";)
    2. alcet tcp any any -> any 80 (content:!"GET";)

     在请求中通过POST提交,包含字符 pass

     提交时通过wireshark抓包,抓取载荷中

    编写规则

    tcp流中如果载荷中出现 ”70 61 73 73“ 则提示 msg 字符串中的内容

     设置完后保存,重新刷新页面,snort这里并没有记录

     当我们通过burp 提交带有pass字符时

     snort这里进行报警

     SQL注入测试

    写一条又臭又长的规则,里面是sql关键字

    nocase:与content配套使用,申明content大小写字符串不敏感

    distance:与content配套使用,本次匹配内容与上次匹配payload内容的间距,同时确保不一样的content匹配内容存在匹配的顺序,distance生效的content为距离distance最近的左侧content

    匹配上

     

    PS:此篇笔记是根据师傅 Thgilil 文章中的内容一步步记录的,第一次接触这个东西,感谢师傅的文章让我学到很多

    Thgilil 师傅的主页地址:Thgilil的博客_CSDN博客-渗透测试,环境搭建,蓝队领域博主

  • 相关阅读:
    Spring Security配置个过滤器也这么卷
    element-ui table分页/筛选后保留勾选项
    tableau高级绘图(十)-Tableau绘制圆形图
    Unity3D URP 仿蜘蛛侠风格化Bloom&AO
    leetcode 剑指 Offer 55 - II. 平衡二叉树
    java汽车租赁超时罚款系统springboot+vue-前后端分离-e36ht
    ROS 第一节 运行小乌龟
    cmake 之add_definitions使用误区
    强化学习-学习笔记14 | 策略梯度中的 Baseline
    【算法与数据结构】--算法应用--算法在实际问题中的应用
  • 原文地址:https://blog.csdn.net/xhscxj/article/details/127959882