1.主机与网络安全问题的发现与解决

作为一个用户,自己的主机是否安全;作为网络管理员,所管理和维护的网络是否安全,解决这些问题除了及时打上操作系统的最新补丁以及安装防火墙和防病毒软件之外,是否还有别的方法呢?答案很简单,就是以一个访问者的角度,全面审视一下自己的网络有什么,没有什么,还有哪些缺陷或漏洞,这正是网络扫描的主要功能之一。

2. 网络扫描的概念

网络扫描是根据对方服务所采用的协议,在一定时间内,通过自身系统对对方协议进行特定读取、猜想验证、恶意破坏,并将对方直接或间接的返回数据作为某指标的判断依据的一种行为。

扫描的目的一般是,对预先的猜想进行验证或采集一些关心的数据。通常被认为是网络攻击的第一步。

3.服务和端口

在网络中,“服务”是指某主机按预先定义的协议和一些国际标准、行业标准,向其他主机提供某种数据的支持,并且称服务提供者为“服务器”(Server),称服务请求者为“客户端”(Client)。为了区分这些服务,引入“端口”(Port)这个概念,即每一个服务对应于一个或多个端口端口具有独占性,一旦有服务占用了某个端口,则通常情况下,另外的服务不能再占用这个端口。

【注意:本处所指的端口则是逻辑上的端口,是专指通过RJ-45以太网网口连接以后,利用协议进行区分的逻辑上的一个值。由此可见,访问网络上的一个指定的服务至少需要知道IP地址和端口两个要素,即Socket地址=(IP地址:Port端口号))】

根据Berkeley套接字的约定,端口名称用一个2字节(16 位)的无符号整数来表示,范围为:0~65535,共65536个。

其中,

端口名称在0到1023之间的端口习惯上称为“熟知端口”(well-knownport);

端口名称在1024至49151之间的端口称为“登记端口”,主要用于服务类,而又不属于熟知端口的程序使用;

端口名称在49152至65535之间的端口称为“临时端口”,是指任何程序都可以临时使用的端口。

端口的“开”和“闭”:
“开”即表示有对应的服务程序通过该端口向外界提供相应服务,只要外界使用满足这一端口的协议访问该端口,就可以得到相应的服务;而“关”则表示对应的服务程序没有安装或当前没有处于运行状态,即使在客户端运行相应访问请求的程序,仍无法得到结果。比如运行浏览器IE(Internet Explorer)并在地址栏输入一个不提供WWW服务的IP地址后,IE就会得到回复:访问出错。

4. 网络扫描

但在某些时候,扫描有三种应用:

1)我们不知道远端的服务器是否提供WWW服务,或者我虽然知道远端的服务器提供WWW服务,但该服务使用的不是默认的80端口,而是使用自己定义的端口,那么怎么知道对方是否提供WWW服务,并且该服务在哪个端口呢?该操作就叫WWW服务扫描

2)我并不想知道远端的服务器是否有某一个具体的服务,我只想知道对方服务器都有哪些服务,可以通过扫描对方所有打开的端口实现,这时,该操作叫做端口扫描

3)对于一批计算机,我想知道这些计算机是否提供某个服务,或这些计算机都打开了哪些端口,这种操作叫做批量扫描

所谓的网络扫描,就是一方通过某种协议,在目标主机不需知情的情况下,对其实施的一种获取想要的信息或通过读到的信息验证预想的行为过程。

5. 网络扫描原理概述

根据扫描的概念可以发现,当一个主机向一个远端服务器的某个端口提出建立连接的请求时,如果对方有此项服务就会应答;如果对方未安装此项服务,即使向相应的端口发出请求,对方仍无应答。

利用这个原理,如果对所有熟知端口或自己选定的某个范围内的熟知端口分别建立连接,并记录下远端服务器所给予的应答,通过查看记录就可以知道目标服务器上都安装了哪些服务,这个过程就叫做端口扫描,所使用的程序叫做扫描程序。

6. 网络扫描算法

在实际扫描器编写过程中,除了有各种技术的选择之外,还需要选择合适的扫描算法。使用哪些扫描算法,也完全取决于扫描的目的,因为这些算法有些可以提高扫描效率,有些可以增加扫描准确度或扫描隐蔽性,有些甚至可能牺牲某些优点而获得所需要的特性。

(1)      非顺序扫描

参考已有的扫描器,会发现几乎所有的扫描器都无一例外地使用增序扫描,即对所扫描的端口自小到大依次扫描,殊不知,这一效果可以被对方的防火墙或IDS(Intrusion Detection System,入侵检测系统)作为判断正被扫描的特征。虽然通过多线程会使这一特征发生少量的变化,但从整体效果上看,仍然显示增序现象。

改变增序特征并不难,一般有如下几种非顺序扫描算法。

1.      逆序扫描算法

逆序扫描就是在扫描的时候,采用从大到小的逆序扫描方式。

2.随机重排扫描算法

随机重排扫描即重新排列要扫描端口的顺序。在新排的顺序中,为了避免漏掉或重复使用某一端口,可以采用互换位置的方式进行。这个过程可以用一个数组和随机数产生函数rand来实现。

//buff是原来的端口扫描顺序

for(i=0;i<=count;i++) 

 {//顺序地让每一个端口值与另一个值对换 

        wRand=rand()%count; //读取一个随机位置 

        //将当前位置的数据与随机位置的数据互换 

        wTemp=buff[i]; 

        buff[i]=buff[wRand]; 

        buff[wRand]=wTemp; 

  } 

采用这个顺序进行扫描的时候,对方防火墙在监测到某个端口连接时,无法立即对下一个要连接的端口进行预测,从而使“基于通过连续端口被连接算法进行扫描判断”的方式失效。

3.线程前加延时扫描算法

为了提高扫描速度,很多扫描算法都采用多线程扫描。

一个简单的算法就是在每一个线程中,扫描函数开始之前挂起(Halt)一个随机的时间,这样会在不影响各线程创建时间的前提下,调整各线程中扫描的顺序。具体的方法就是在线程的开始加一句:

Sleep(rand()%5000);//假设每个线程挂起时间是5秒以内的一个随机数

(2)       高速扫描

常见的高速扫描算法有多线程并行扫描技术、基于KB(Knowledge Base,知识库)技术、将扫描和判断分离的技术。

多线程的扫描技术几乎贯穿和应用于大多数的扫描器中。

KB技术是指把扫描过的主机信息存储起来,当下次扫描的时候,首先以上次的扫描结果作为参考,先对用户最关心的方面进行重新扫描,然后对其余部分进行扫描,这样既能提高扫描速度,又能有效降低占用的带宽。

扫描和判断分离技术。在一些特殊扫描中,常规的API函数无法满足扫描的要求,这时需要采用非常规的方式。

例如扫描UDP某端口时,通过sendto函数发送数据包后,需要通过嗅探(Sniffer)技术读取ICMP协议,而嗅探可以接受任意数据包,因此采用多线程时,各线程的嗅探会因相互接对方的回复包,而导致扫描结果出错。如果采用单线程,则需要不停地重复“发出探测包→接收结果→分析结果”这一流程,其中最耗时间的是发出探测包和接收结果。如果将发送和接收分开,发送只负责发送,接收操作统一进行,那么,由发出探测包到接收结果之间的等待时间成为并行,从而大大提高扫描速度。

(3)      分布式扫描

分布式扫描则主要使用多台主机同时对目标主机进行扫描。

(4)      服务扫描

端口扫描器只能扫描出端口的状态是否开放,而不会判断端口所对应的服务是否为该端口所具有的默认服务。服务扫描则是直接对服务进行扫描,并通过服务的存在与否,间接地判断端口是否处于“开”状态。

(5)      指纹识别算法

所谓指纹识别技术就是与目标主机建立连接,并发送某种请求,由于不同操作系统以及相同操作系统不同版本所返回的数据或格式不同,这样,根据返回的数据就可以判定目标主机的操作系统类型及版本。

(6)      漏洞扫描

网络扫描大部分的目的是获得对方信息,为下一步操作做出判断,漏洞扫描则直接提供了攻击对方的方法。

漏洞扫描器是所有扫描器中应用针对性最强、时效性最差的一种扫描器,前者是说通常某漏洞扫描器只针对某一应用,甚至要精确到某一软件的某一版本;后者是说一旦这种扫描算法或原理公开,则该漏洞很快会被开发人员补上,导致该扫描器失效。但由于其针对性最强,所以也最具攻击性。漏洞扫描的另外一种表现形式就是“安全扫描”,因为有些安全选项设置错误,本身也相当于漏洞,如“允许匿名登录”、“网络某服务不需要认证”等选项设置。

(7)      间接扫描

间接扫描的思想是利用第三方的IP(欺骗主机)来隐藏真正扫描者的IP。由于扫描主机会对欺骗主机发送回应信息,所以这种扫描的使用者必须具有监控欺骗主机的能力,以便获得原始扫描的结果。

(8)      秘密扫描

扫描程序通过采用非正常和非常规的方式,试探协议中在网络较差情况下的容错技术,通过这些容错技术的不同反馈达到扫描的目的。

“TCP SYN扫描”、“TCP ACK扫描”、“TCP NULL扫描”、“TCP FIN+URG+PSH扫描”、“TCP FIN扫描”都是几种常见的秘密扫描方式

(9)认证扫描

认证扫描则是利用认证协议的特性,通过判断获取到的监听端口的进程特征和行为,获得扫描端口的状态。认证扫描尝试与一个TCP端口建立连接,如果连接成功,扫描器发送认证请求到目标主机的TCP113端口(用于鉴别TCP连接的用),同时获取运行在某个端口上进程的用户名(userid),从而达到扫描的作用。

(10) 代理扫描

代理扫描需要在原有所有算法的基础上再加上一个与代理服务器的通信,当前代理服务器的协议主要是SOCK5。

(11)被动扫描

以上几乎所有的扫描都属于主动探测模式,即发送刺探信息,然后根据对主机的反馈做出判断。这种模式有时不但检测不到对方真实的信息,反而会被对方反向监测。

被动扫描模式则不发送刺探消息,而只是监听。通常情况下,被扫描的主机是不会主动联系扫描主机的,所以被动扫描只能通过截获网络上散落的数据包进行判断。

7.网络扫描器的分类

根据扫描软件运行环境可以分为UNIX/Linux系列扫描器、Windows系列扫描器、其他操作系统扫描器。

根据扫描端口的数量可以分为多端口扫描器和专一端口扫描器。

根据向用户提供的扫描结果可以分为只扫开关状态和扫描漏洞两种扫描器。前者一般只能扫描出对方指定的端口是“开”还是“关”,但由于不知道提供什么服务而没太大的用途。而扫描漏洞扫描器一般除了告诉用户某一端口状态之外,还可以得出对方服务器版本、用户、漏洞。

根据所采用的技术可以分为一般扫描器和特殊扫描器。一般扫描器在编制过程中通过常规的系统调用完成对系统扫描,这种扫描只是网络管理员使用,因为这种扫描器在扫描过程中会花费很长时间、无法通过防火墙、在被扫描机器的日志上留下大量被扫描的信息。而特殊扫描器则通过一些未公开的函数、系统设计漏洞或非正常调用产生一些特殊信息,这些信息使系统某些功能无法生效,但最后却使扫描程序得到正常的结果,这种系统一般主要是黑客编制的。

8. 网络扫描技术的发展史

(1)手工扫描阶段

如Telnet客户端进行验证、FTP客户端程序连接、批处理命令ping一个地址范围内的主机

(2)使用通用扫描器阶段

端口的概念是处于传输层上的,所以在扫描端口时,我们可以说扫描的是TCP或UDP端口而不是别的协议的端口。例如,139端口是NetBIOS协议端口,想扫描139端口是不是处于“开”状态,只需要向目标主机139端口发送信息然后根据返回信息进行判断就可以了。这种扫描器一般只能扫描出对方某一端口是否开放,然后检索端口数据库,给出对这一端口提供的服务。

(3)设计专用扫描器阶段

通用扫描器有不准确或不精确的缺点。比如,某人的服务器没有提供NetBIOS服务,而正好有一个服务器应用软件使用139端口进行通信,此时由于扫描器在139端口建立连接成功而通过查端口数据库认为139端口处于“开”状态而且提供了NetBIOS服务。

专用扫描器则不求功能多,只扫描特定的一个或几个端口,扫描后,不仅给出所扫端口是否处于“开”的状态,指出其提供的服务,而且会拿对应的服务和目标主机建立连接,从而获得对方服务器版本号、用户列表、共享目录、漏洞等信息。

9.当前网络常见的漏洞

下面列出一些目前为止仍然广泛使用或仍没有太好解决方案的漏洞。

(1)      DOS和DDOS

DOS: 在C/S(客户端/服务器)模式下,如果有一个主机同时向某个服务器始终发送远超服务器在某时刻响应客户端的上限数量,则其他主机同时向该服务器提出申请的时候,就会处于等待状态。服务器拒绝向其它主机提供服务,故称这种方式为“拒绝服务”式攻击。

DDOS: 该技术中,各个主机所采用的仍是DOS攻击,但同时采用了分布于不同主机上的多台主机同时攻击同一个服务器的方式。

(2)      缓冲区溢出

缓冲区溢出指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,使得溢出的数据覆盖在合法数据上,这就为缓冲区溢出埋下隐患。操作系统所使用的缓冲区又被称为"堆栈"。在各个操作进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出。

通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。


strcpy函数本身在复制的时候,并不考虑是否超过了buff的长度,它只是按自己的要求,只要不遇到字符'\0',复制就不会停止,因而其内容前16个字节保存在buff中,第16个字节之后的内容,将保存在buff数组之后的内存中,这就是缓冲区溢出,这样的错误会在运行的时候报错。

存在像strcpy这样的问题的标准函数还有strcat(),sprintf(),vsprintf(),gets(),scanf()等。

到现在为止,缓冲区溢出还只是一个bug,还达不到“漏洞”的级别。要想成为一个攻击时可以利用的漏洞,就需要更深入的分析,并且需要很多计算机底层的相关知识

(3)      注入式攻击

注入式攻击是将本来不属于设计者原意的东西通过“注入”的方式加入到某系统中,这样做的目的是想让注入的那部分出现意想不到的效果。缓冲区溢出的方式就属于注入式攻击,除此之外,更多的是SQL注入式攻击。

(4)      明文传输

明文传输的密码在从用户的源主机到目标主机之间还有很多环节,在这些环节中的任何一处都有可能监听到该密码。

(5)      简单密码

简单的密码会使攻击者很容易获得密码,并随后直接以正常用户使用某系统。

网络扫描技术揭秘读书笔记1--简介相关推荐

  1. 网络扫描技术揭秘读书笔记3--TCP SYN扫描

    TCP SYN扫描(使用Winpcap库实现) 0.核心原理 半开扫描(TCP SYN)不同于CSocket和Socket2扫描,后两者扫描都是完成了一个完整的三次握手(即connect函数),而半开 ...

  2. 网络扫描技术揭秘学习笔记《二》NetBIOS/NrtBEUI协议编程

    <二>NetBIOS/NrtBEUI协议编程 1. NetBIOS简介 NetBIOS协议既可以是一个面向连接的数据包服务,也可以是面向非连接的对话服务.早起的NetBIOS只适用于局域网 ...

  3. 《Python网络爬虫技术》读书笔记1

    文章目录 使用Selenium爬取动态网页 部署Selenium 简答使用Selenium 页面等待 元素选取 页面操作 填充表单 执行JavaScript 模拟登陆 简单的处理验证码 代理 使用Re ...

  4. web前端黑客技术揭秘 读书笔记

    2019独角兽企业重金招聘Python工程师标准>>> 关于sql注入 正常sql : select username,email from users where id=1 ;  ...

  5. 《诸神之眼:Nmap网络安全审计技术揭秘》读书笔记

    <诸神之眼:Nmap网络安全审计技术揭秘>读书笔记 作者:李华峰 ◆ 前言 NSE是Nmap中革命性的创新.通过Nmap强大的脚本引擎(NSE),每一个用户都可以向Nmap中添加自己编写的 ...

  6. 信息收集之基础端口扫描《诸神之眼——Nmap网络安全审计技术揭秘》总结一

    端口扫描 <诸神之眼--Nmap网络安全审计技术揭秘>总结 手动端口扫描 Nmap Nmap的基本操作 活跃主机发现技术 基于ARP协议的活跃主机发现技术 基于ICMP协议的活跃主机发现技 ...

  7. [云数据中心] 《云数据中心网络架构与技术》读书笔记 第七章 构建多数据中心网络(1/3)

    7.1 多数据中心的业务诉求场景 7.1.1 多数据中心的业务场景分析 主流需求:虚拟化和资源池化,形成多活,可就近提供服务 1. 业务跨数据中心部署 2. 两地三中心 是指在同城双活的数据中心基础上 ...

  8. [云数据中心] 《云数据中心网络架构与技术》读书笔记 第八章 构建云数据中心端到端安全

    8.1 云数据中心面临的安全挑战 因为云化和SDN化的网络特点(网元出现的位置随意性更大,出现和消失的时间不定): 首先会导致安全业务开通周期长: 其次SDN的自动化能力是现在安全业务所不能达到的,很 ...

  9. “Oracle数据库并行执行”技术白皮书读书笔记

    本文为白皮书Parallel Execution with Oracle Database(2019年2月20日版本)的读书笔记. 简介 数据快速增长,但业务仍要求数据的快速处理. 并行执行是大规模数 ...

最新文章

  1. 300万知乎多标签文本分类任务经验分享(附源码)
  2. SCVMM 2012 R2---安装SCVMM 2012 R2服务器
  3. poj-2029 Get Many Persimmon Trees
  4. 两高发布司法解释 依法严惩涉地下钱庄犯罪
  5. [Perl] Python 与 Perl 合并,打造史上最牛语言 Parrot
  6. java 单元测试 异步_java - 如何使用CountdownLatch对异步代码进行单元测试同步 - 堆栈内存溢出...
  7. 震惊!Spring Boot 内存又泄露,排查太难了!
  8. Notepad工具json格式转换
  9. 关于字体的一些知识,以及分享一些免费可商用字体
  10. matlab编制刚度矩阵,单元刚度矩阵MATLAB编程.docx
  11. 端口扫描工具Namp
  12. ICP算法学习笔记(原理加公式理解)
  13. 学会远程开机之后,发现远程控制软件特别多,哪些好用?哪些免费?
  14. spanning tree protocol
  15. 大一学生WEB前端静态网页——唯品会1页 包含hover效果
  16. 二十六万字详解bat文件
  17. excel从身份证号码中获取邮编信息?
  18. python好看图案的编程代码_利用Python绘制了一些有意思的图案
  19. unicloud.dcloud
  20. Visual Studio版本汇总比较

热门文章

  1. 学习:HashMap遍历方式
  2. rand()随机函数的相关用法
  3. 本作包括有宏大的5个章节
  4. 电表显示屏为什么要选用断码液晶屏?
  5. All in One主机
  6. java打印线程堆栈_Java问题定位之Java线程堆栈分析
  7. sql上下级关系查询
  8. 如何在word2016中使用自带的word公式编辑器
  9. 在全国断网的情况下我们如何上网?
  10. POJ4124伟大的航线