nmap扫描特征分析_集群智慧网络安全云
全国客户服务热线:4006-054-001 疑难解答:159-9855-7370(7X24受理投诉、建议、合作、售前咨询),173-0411-9111(售前),155-4267-2990(售前),座机/传真:0411-83767788(售后),微信咨询:543646
企业服务导航

nmap扫描特征分析

发布日期:2024-05-19 浏览次数: 专利申请、商标注册、软件著作权、资质办理快速响应热线:4006-054-001 微信:15998557370


nmap扫描特征分析

本文基于ET公开的规则集 https://rules.emergingthreats.net/OPEN_download_instructions.html 中的 emerging-scan.rules 来进行nmap扫描特征分析 rule简介 以该规则为例 alert ip any any -> any any (msg: "IP Packet detected";) 它会检测所有传入的IP数据包并输出一个消息:"IP Packet detected" Snort的规则被分为两个部分:规则头和规则选项 规则头包含规则的动作,协议,源和目标ip地址与网络掩码,以及源和目标端口信息;规则选项部分包含报警消息内容和要检查的包的具体部分 在上面这个规则里面 alert 表示如果包与后面的规则匹配 则产生一个告警信息(Snort的动作有alert、log、pass、activate和dynamic.) ip指规则用在所有的IP包上 第一组 any any IP包的源IP和源端口 -> 指数据流动方向 第二组 any any IP包的目的IP和目的端口 这里两组都是指匹配任何IP地址和任何端口 括号内的是规则选项 ,msg是一个告警信息作为提示信息,语法为 关键字:变量,不同的规则之间用 ;分隔 例如这条规则选项的含义就是匹配TTL为100的数据包 (msg:"Ping with TLL=100"; ttl: 100;) nmap检测规则 部分规则类似,选择差别比较大的规则来讲解 攻击机环境:windows11、Nmap 7.92 受害机环境:kali linux nmap -sS TCP SYN扫描 nmap -sS 表示进行TCP SYN扫描,Nmap发送一个TCP包只设置SYN(同步)标志位给目标端口,然后等待目标主机的响应。根据不同情况的响应,Nmap可以确定目标主机上的端口是开放的、关闭的还是过滤的 TCP SYN 扫描的优点在于它能够在不与完整的TCP连接建立之前进行扫描,因此相对隐蔽,并且速度较快 对应的规则集是 alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"ET SCAN NMAP -sS window 2048"; fragbits:!D; dsize:0; flags:S,12; ack:0; window:2048; threshold: type both, track by_dst, count 1, seconds 60; reference:url,doc.emergingthreats.net/2000537; classtype:attempted-recon; sid:2000537; rev:8; metadata:created_at 2010_07_30, updated_at 2010_07_30;) 我们主要关注规则选项 fragbits:!D 该部分表示数据包的标志位中不包含DF(Don't Fragment)位 dsize:0 数据包大小为0 flags:S,12 数据包的标志位,其中S表示SYN位被设置,12表示保留位未被设置 ack:0 数据包的确认号(ACK)为0 window:2048 TCP窗口大小为2048 threshold: type both, track by_dst, count 1, seconds 60 设置了规则的阈值,当满足条件时,在60秒内针对同一目的地IP地址只允许出现1次匹配 使用nmap进行扫描 nmap -sS 192.168.6.128 为了方便查看我们使用wireshark ,过滤攻击机IP ip.src_host == 192.168.6.1 很显然这里是不符合上面的规则 window:2048 找到了它的姐妹规则 是有window 1024的 alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"ET SCAN NMAP -sS window 1024"; fragbits:!D; dsize:0; flags:S,12; ack:0; window:1024; threshold: type both, track by_dst, count 1, seconds 60; reference:url,doc.emergingthreats.net/2009582; classtype:attempted-recon; sid:2009582; rev:3; metadata:created_at 2010_07_30, updated_at 2014_03_18;) alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"ET SCAN NMAP -sS window 3072"; fragbits:!D; dsize:0; flags:S,12; ack:0; window:3072; threshold: type both, track by_dst, count 1, seconds 60; reference:url,doc.emergingthreats.net/2009583; classtype:attempted-recon; sid:2009583; rev:3; metadata:created_at 2010_07_30, updated_at 2014_03_18;) alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"ET SCAN NMAP -sS window 4096"; fragbits:!D; dsize:0; flags:S,12; ack:0; window:4096; threshold: type both, track by_dst, count 1, seconds 60; reference:url,doc.emergingthreats.net/2009584; classtype:attempted-recon; sid:2009584; rev:2; metadata:created_at 2010_07_30, updated_at 2014_03_18;) fragbits 不允许分段 dsize 传输层payload大小为0 flags:S,12 flags位置设置了SYN位,忽略CWR和ECE位 ack:0 ack位为0 threshold: type both, track by_dst, count 1, seconds 60 当满足条件时,在60秒内针对同一目的地IP地址只允许出现1次匹配,这条不会在wireshark里面看出来 nmap -sA TCP ACK扫描 alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"ET SCAN NMAP -sA (1)"; fragbits:!D; dsize:0; flags:A,12; window:1024; threshold: type both, track by_dst, count 1, seconds 60; reference:url,doc.emergingthreats.net/2000538; classtype:attempted-recon; sid:2000538; rev:8; metadata:created_at 2010_07_30, updated_at 2010_07_30;) ACK扫描最关键的当然是 flags:A,12 但是如果只是看ACK包又会有很多的误报,所以其他的规则我理解是为了降低误报,比如window 1024,大多数情况下,TCP数据包的大小是动态变化的 第二个sA扫描的规则也是类似,只是改变了数据包大小为3072 alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"ET SCAN NMAP -sA (2)"; fragbits:!D; dsize:0; flags:A,12; window:3072; threshold: type both, track by_dst, count 1, seconds 60; reference:url,doc.emergingthreats.net/2000540; classtype:attempted-recon; sid:2000540; rev:8; metadata:created_at 2010_07_30, updated_at 2010_07_30;) nmap User-Agent检测 使用nmap的脚本对IP进行扫描 alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (msg:"ET SCAN Nmap Scripting Engine User-Agent Detected (Nmap Scripting Engine)"; flow:to_server,established; content:"User-Agent|3a| Mozilla/5.0 (compatible|3b| Nmap Scripting Engine"; fast_pattern:38,20; http_header; nocase; reference:url,doc.emergingthreats.net/2009358; classtype:web-application-attack; sid:2009358; rev:5; metadata:created_at 2010_07_30, updated_at 2010_11_22;) 在规则里面的 |3a| 代表ASCII字符冒号,|3b|代表ASCII字符分号,所以content为 User-Agent: Mozilla/5.0 (compatible; Nmap Scripting Engine 剩下的fast_pattern:38,20; http_header; nocase; 这些选项组合在一起,用于指定在HTTP头部中进行快速、大小写不敏感的匹配检查。这样可以加快规则的匹配速度,并且更灵活地捕获目标内容 nmap SQL注入扫描 alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"ET SCAN NMAP SQL Spider Scan"; flow:established,to_server; content:"GET"; http_method; content:" OR sqlspider"; http_uri; reference:url,nmap.org/nsedoc/scripts/sql-injection.html; classtype:web-application-attack; sid:2013778; rev:1; metadata:created_at 2011_10_19, updated_at 2011_10_19;) SQL注入检测的关键位置是 uri 包含 " OR sqlspider" 为什么要这么检测,需要从nmap的这个SQL脚本里面寻找答案 - https://svn.nmap.org/nmap/scripts/http-sql-injection.nse 它会把参数的值修改为 ' OR sqlspider,用来触发SQL注入报错 具体怎么判断是否SQL注入报错,LUA脚本使用了一个check_injection_response方法 local function check_injection_response(response) local body = string.lower(response.body) if not (response.status == 200 or response.status ~= 500) then return false end if errorstrings then for _,e in ipairs(errorstrings) do if string.find(body, e) then stdnse.debug2("error string matched: %s", e) return true end end end return false end 对攻击后的页面进行字符串检测,默认的报错关键字列表为 errorstrings = {"invalid query", "sql syntax", "odbc drivers error"} 所以一切都说得通了 nmap 操作系统探测 检测规则为 alert udp $EXTERNAL_NET 10000: -> $HOME_NET 10000: (msg:"ET SCAN NMAP OS Detection Probe"; dsize:300; content:"CCCCCCCCCCCCCCCCCCCC"; fast_pattern:only; content:"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"; depth:255; content:"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"; within:45; classtype:attempted-recon; sid:2018489; rev:3; metadata:created_at 2014_05_21, updated_at 2014_05_21;) 这里的规则需要nmap 探测OS版本的时候触发 查看wireshark,UDP包对应的Data里面被填充为C,这个特征很明显,并且很难误报 小结 即便使用最新版本的nmap,nmap大部分扫描的特征还是会存在,想要绕过IDS的话就需要自行修改nmap源码,去除特征后自行编译 参考链接 https://www.cnblogs.com/starrys/p/15257712.html https://rce.moe/2022/11/06/portscantoolsanalyse/ https://github.com/al0ne/Nmap_Bypass_IDS https://xz.aliyun.com/t/6002 https://zhuanlan.zhihu.com/p/248625327 https://rules.emergingthreats.net/OPEN_download_instructions.html https://svn.nmap.org/nmap/scripts/http-sql-injection.nse https://www.cnblogs.com/yuersan/p/15236326.html https://jax777.win/2019/08/18/nmap/ 文章来源: https://xz.aliyun.com/t/13779文章作者:枫糖甜酒 黑白之道发布、转载的文章中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途及盈利等目的,否则后果自行承担! 如侵权请私聊我们删文 END

nmap扫描特征分析