一、关于安全
1、安全问题的根源:
1)、分层思想,这个分层包括网络分层和软件分层等,分层可以将大的问题划分为不同的层次,层次与层次之间通过一定的接口标准进行信息交换,从而将一个大问题拆分开来由不同层次的模块去实现扩展。
· 从功能实现的角度看,分层是很方便高效的。
· 从系统安全的角度看,不同层次由不同的人去负责,每个人的眼光具有局限性,无法意识到其他层次的安全问题。
· 系统安全要保证完全的安全,任何一点的漏洞都有可能导致系统崩溃,所以要全面地考虑系统安全。
2)、只追求功能的实现,很多技术人员只追求功能的实现而不从安全的角度设计架构软件。
3)、最大的安全威胁是人,只要有人,就会或多或少出现纰漏,让不法分子有机可乘。
2、安全目标:安全人员在保护系统安全时要实现的目标。
1)、先于×××者发现和防止漏洞出现:
· ×××型安全:用×××的手段(×××测试)探测系统的漏洞,再去修补他。
· 防护型安全:将不必要的端口关闭,将系统的×××面降到最低。但这样周期长,投入多,效果不好,因为总有没有防护到的地方。
2)、在保护系统安全时要充分从×××型安全和防护型安全的角度去考虑。
二、×××测试
1、用×××的手段
*
系统,尝试绕过或打败安全防御机制,发现系统的弱点。
2、×××测试者应不断证明安全问题的存在,不能去破坏系统。
3、×××测试者就是白帽子,白帽子和黑帽子拥有相同的技能,只是用的地方不一样,一个用于守护,一个用于破坏。
· ×××测试和×××的区别在于是否取得目标公司的授权。
4、×××测试标准:简称PETS(详见:
http://www.pentest-standard.org
),他将×××测试的流程做了一个划分。
1)、前期交互阶段:和客户进行前期沟通。
· 确定×××测试的范围:将大系统划分为一个个子系统(包括系统内所有的设备系统软件)分别去×××测试。
· 确定测试方式:现场测试,远程测试,是否使用社会工程学的手段配合,是否进行直接的DDoS×××型的测试。
· 确定×××投入:花费多少时间,人力。
2)、情报搜集阶段:对目标系统进行信息搜集。
· 被动信息搜集(不与目标系统进行直接交互):邮箱地址,联系人,公司地址,DNS信息,服务器的IP,网站的域名,近期公司动态等。
· 主动信息搜集(对目标系统进行主动探测):主机发现,端口发现,服务发现等。
· 通过搜索引擎和扫描进行情报收集。
3)、威胁建模阶段:通过前期的情报搜集已经对系统有了大概的认识,然后分析情报选取效率最高(用时最短,威胁最大)的手段进行×××测试。
4)、漏洞分析阶段:根据情报分析漏洞。
· 目标服务器版本是否过低,是否有已经公开的漏洞。
· 对一些组件进行逆向分析,发现0day,编写具有针对性的×××脚本。
5)、××××××阶段:漏洞分析完毕后,对漏洞进行××××××,这时候会遇到各种安全防护机制,要想办法绕过防护机制,进入系统拿到权限。
6)、后×××测试阶段:拿到一台服务器的权限后,要继续利用这台服务器向内网×××,想办法控制更多的服务器造成更大的威胁。
7)、×××测试报告:×××人员将漏洞的发现利用到控制整个服务器的过程记录成报告,并附上漏洞的修补方法,提交给目标公司的领导层。
5、×××测试误区:扫描器就是一切。
· 扫描器只能找到技术型的漏洞,对于业务逻辑漏洞无能为力,业务逻辑漏洞需要×××测试人员根据公司的业务逻辑寻找。
Kali linux概述
一、关于kali linux
1、Kali的缘由:
image.png
2、kali linux介绍:
1)、基于Debian的Linux发行版本。
2)、前身是BackTrack(最后更新版本是5.23,之后停止更新),2013年3月发布。
3)、用于×××测试和安全审计。
4)、包含600+安全工具(将之分类,包含×××测试,逆向工程,电子取证等工具)。
5)、采用FHS标准的目录结构(所有linux系统都采用的目录结构,这也是kali取代BT的重要原因)。
6)、定制内核(定制的无线驱动的内核,方便进行无线×××)。
7)、支持ARM和手机平台(有ARM和手机平台的版本,可以在上面安装kali linux)。
8)、开源免费(由一个×××型安全组织Offensive Security Ltd进行开源维护)。
3、kali linux策略:
1)、root用户策略:其他linux平台一般遵循权限最低原则,平常使用普通用户工作,必要时才登陆root用户。但是kali中的安全工具大部分都需要root权限才能使用,而且kali linux使用者要有能力放心的使用root用户,所以一般使用root用户工作。
2)、网络服务策略:kali中的所有网络服务默认关闭,也无自动启动脚本,重启后需要手动开启。
· 如果想要自启动某服务,可以使用命令设置。
3)、更新升级策略:kali是基于debian的再开发,debian的所有更新都会同步到kali上。同时安全工具的更新也会同步到kali上。
4、关于本课程:
image.png
Kali linux安装
一、硬盘安装
1、下载iso安装镜像文件。
·
https://www.kali.org/downloads/
· mini版本是最小化版本的kali安装镜像,里面不包含任何安全工具,需要自己安装。
2、验证hash值:排除下载过程中造成的文件损失导致的故障。
· 计算方法:下载一个计算文件sha256sum的工具,再计算iso文件的sha256sum值,将之与官网上给出的sha256sum值比对,相同则下载无损。
image.png
3、制作启动光盘或启动U盘:
1)、制作启动光盘:需要光盘刻录机和光盘介质。
2)、制作启动U盘:使用unetbootin软件将iso文件抽取拷贝到U盘中(U盘应大于4G)。
4、设置BIOS启动顺序:重启电脑设置BIOS启动顺序,让电脑通过U盘启动。
5、启动安装:设置好BIOS启动顺序后,电脑会进入kali linux的安装界面。
image.png
1)、Live(amd64):电脑启动U盘中的系统,不安装。这种属于体验模式(U盘只读),不能安装软件包,也不能升级更新操作系统。
2)、Live(amd64 failsafe):
3)、Live(forensic mode):启动取证模式,可以进行计算机犯罪或电子取证的操作。
4)、Live USB Persistence:启动持久USB中的Live光盘,对U盘内的操作系统可读可写。
5)、Live USB Encrypted Persistence:启动持久加密USB中的Live光盘,对U盘内的操作系统可读可写且操作加密。
· 4、5相当于拥有了一个移动的kali linux操作系统,不需要安装,即插即用。
6)、Install:命令行安装kali。
7)、Graphical install:图形化安装kali。
二、Docker安装
1、在官网上下载一个docker的image文件,再在上面开启容器运行。
image.png
· 可以远程连上Docker,进入里面的容器。
三、基于virtualbox的虚拟机安装
1、下载virtualbox及其扩展功能包,并在全局设定中导入扩展包。
2、创建虚拟机:
1)、新建虚拟电脑。
image.png
2)、设置内存大小,根据自己内存的情况设置,在此设置4096MB内存。
3)、现在创建虚拟硬盘。
4)、设置虚拟硬盘文件类型为VDI。(如果以后要将虚拟硬盘文件用vm虚拟机启动,虚拟硬盘文件类型选择vmdk)
5)、动态分配空间。
6)、设置虚拟硬盘文件的位置和大小,100GB。
7)、虚拟机创建成功。
3、设置虚拟机:
1)、设置核数。
2)、虚拟机不用启用声音。
3)、启用网卡的网络连接,连接方式为NAT模式。
4)、为虚拟机插入iso镜像文件。
image.png
4、启动虚拟机。
5、图形化界面安装kali linux:
1)、设置语言(汉语 or 英语)。
2)、设置主机名(MyKali)。
3)、设置域名(跳过)。
4)、设置root密码(000000)。
5)、磁盘分区:使用整个磁盘——>将/home、/var、/tmp都分别放在单独的分区——>将改动写入磁盘。
6)、安装系统。
7)、更新软件包。
8)、将GRUB启动引导安装到硬盘的MBR上。
6、安装tools(安装虚拟机增强功能):
1)、需要先安装linux内核的头文件,apt-get install linux-headers-$(uname -r)
2)、将光盘中的VBoxLinuxAdditions.run移到桌面,在桌面打开terminal,赋予这个文件执行权限(chmod +x file),再执行该文件(./file)。
3)、安装成功,重启系统。
7、注意:
1)、如果觉得手动安装系统麻烦,可以下载官网配好的虚拟硬盘文件,用VMware虚拟机的硬盘文件在virtualbox中创建虚拟机:创建虚拟硬盘文件时选择使用已有的虚拟硬盘文件——>选择下载的虚拟硬盘文件中的第一个。这样即可直接进入配置好了的kali linux系统,默认root密码是toor。
2)、apt-get update:下载系统中所有软件包最新版本的索引文件,下载好后再用apt-get upgrade将软件包根据索引文件进行升级。
3)、dmesg:查看系统变化。
四、持久加密USB的方式使用kali
1、Live USB Encrypted Persistence这种模式下启动kali要输入保护密码,U盘相当于是一个移动kali linux系统,可读可写,并且写的内容是加密的。
· 将U盘的其余空间进行磁盘级别的加密,并将系统文件目录都转移到加密空间中,且之后对系统的更改都会写入到加密空间中。
· LUKS(linux unifield key setup):Linux磁盘分区加密规范,以前不同的软件开发者对磁盘加密有各自的算法,彼此不兼容,国际标准组织将磁盘加密技术做了一个规范,实现了Linux中磁盘磁盘加密技术的统一。(windows系统也可使用LUKS进行磁盘加密,但是想要查看加密磁盘需要下载DoxBox)
· LUKS进行Linux的磁盘加密是通过dm-crypt和cryptsetup实现的:dm-crypt是后端组件,用于加密解密磁盘数据。cryptsetup是前端组件,是一个命令行工具,用于发出对磁盘进行加密解密的指令。
· 加密技术有文件级别的加密和磁盘级别的加密:
文件级别的加密只是基于操作系统对文件进行加密,可以将文件从磁盘中读出来或取得系统的管理员权限从而打开文件。
磁盘级别的加密会对磁盘中的数据进行加密,要想查看得要有证书或秘钥,更安全。(windows的磁盘加密软件bitlocker)
2、linux系统下制作启动U盘:
1)、将插入的U盘映射到虚拟机中。
2)、将kali linux中的iso文件用unetbootin抽取拷贝到U盘中。
3)、或者使用块复制将iso文件抽取拷贝到U盘中:先卸载删除U盘中的分区(使用工具GParted),再将iso文件抽取拷贝到U盘(dd if=kali-linux-2018.2-amd64.iso of=/dev/sdb bs=1M)。
· if指定输入文件,of指定输出文件,bs指定一次复制的块的大小。
· dd复制iso文件看不到进度,使用命令:watch -n 5 killall -USR1 dd,每五秒输出一次dd复制的进度。
3、为U盘创建额外分区,使用LUKS加密分区,打开并格式化加密分区并设置卷标,挂载加密分区,添加配置文件persistence.conf。
· 创建额外分区使用工具parted:
· print devices:查看现在系统中插入的设备情况。
· select /dev/sdb:选中设备,对其分区。
· print:查看当前设备分区情况。
· mkpart primary 3063(起始位置) 7063(终止位置):给设备新建了一个约4G的主分区。
· 使用LUKS加密分区:
· cryptsetup –verbose –verify-passphrase luksFormat /dev/sdb3:对设备的第三分区进行磁盘加密。
· 输入磁盘加密的保护密码。
· 格式化加密分区并设置卷标:
· cryptsetup luksOpen /dev/sdb3 usb:打开加密分区,将他挂载到/dev/mapper/usb目录下,要输入保护密码。
· mkfs.ext4 /dev/mapper/usb:对加密分区进行格式化。
· e2label /dev/mapper/usb persistence:为加密分区设置卷标,卷标名为persistence。
· 挂载加密分区:
· mount /dev/mapper/usb /mnt/usb/:将设备挂载到/mnt/usb目录下,linux访问一个设备要将其挂载到一个目录中,访问这个目录就是在访问这个设备。
· 添加配置文件:
· echo “/ union” > /mnt/usb/persistence.conf:这个配置文件将在usb以持久加密模式启动系统时被读取,以确认这个分区就是要存放加密信息的分区。
4、卸载设备,关闭加密分区:umount /dev/mapper/usb & cryptsetup luksClose /dev/mapper/usb。
5、U盘配置成功,以后可以用这个U盘打开持久加密的kali linux系统了。
Kali linux环境
一、kali linux目录结构
1、系统界面设置工具:gnome-tweaks
2、监视网络流量的工具:nethogs
3、目录结构(使用FHS目录结构):文件根据自己的类型放在对应的目录下。
1)、/bin:存放所有用户都可以使用的程序目录。
2)、/boot:存放系统内核及引导程序的目录。
3)、/dev:存放设备文件的目录。
4)、/etc:存放配置文件的目录。
5)、/home:其他用户家目录所在的目录。
6)、/lib:存放库文件的目录。
7)、/lib64:存放64位库文件的目录。
8)、/live-build:build自己kali版本时使用的目录。
9)、/live+found:系统崩溃退出时存放丢失文件的目录。
10)、/media:默认挂载外接存储的目录。
11)、/mnt:以前的默认挂载外接存储的目录。
12)、/opt:存放一些应用程序的目录。
13)、/proc:是系统启动时临时生成的目录,是内存的映射,用于存放系统的运行配置参数。
14)、/root:root用户的家目录。
15)、/sbin:存放管理员才有权限使用的程序目录。
16)、/selinux:linux的安全机制目录。
17)、/tmp:存放临时文件的目录。
18)、/usr:存放用户自己安装的软件目录,里面自成框架。
19)、/var:存放经常变化的文件目录,例如邮件日志等。
二、kali linux常用命令
1、linux是基于命令行的,图形化桌面环境有gnome、KDE等。
· linux的命令行解释器是bash。
2、常用的bash命令:
1)、ls:显示当前目录的所有文件,蓝色表示目录,白色表示文件,绿色表示可执行文件,红色表示压缩包文件。
· 常用参数有-lhra,–sort=size/time。
2)、cd:切换目录。
3)、pwd:查看当前目录路径。
4)、cat:查看文件内容,会将文件内容全部打印。
5)、more:查看文件内容,一次只显示一部分内容,会在左下角显示已显示内容的百分比。
6)、less:查看文件内容,一次只显示一部分内容。
7)、tail:从尾部显示文件内容。
· 常用参数有-n,
· 常和watch配合使用:watch -n 2 tail -20 /var/log/messages(每两秒检查一次日志,有变化则更新)
8)、cp:复制文件。
· 复制目录加-r。
9)、rm:删除文件。
· 删除目录加-r。
10)、top:监视系统性能的命令。
· 可以kill pid来删除指定id的进程。
11)、ps:查看系统进程信息。
· ps -ef:查看系统进程信息,包含开启的命令、pid、ppid等。
· ps aux:查看系统进程信息,包含开启的命令、pid、cpu使用率、内存使用率。
12)、grep:过滤文本内容(按行过滤)。
13)、ifconfig:查看网卡信息。
· 临时修改网卡的mac地址:ifconfig eth0 down(关闭网卡)—>macchanger -m 00:11:11:11:11:11 eth0—>ifconfig eth0 up
14)、netstat:查看系统的网络情况。
· netstat -pantu:查看和系统建立tcp/udp连接的情况。
15)、uniq:将相同的行合并。
16)、mount:查看系统挂载情况。
· mount -o loop kali.iso /media/cdrom:将外部设备或网络文件夹挂载到/media/cdrom目录下。
17)、dmesg:查看系统最新日志,和tail /var/log/messages显示一样。
18)、find:查找文件或目录的位置。
· find / -name “nmap”:从根目录开始查找名为nmap的文件或目录。
· find / -iname “nmap”:从根目录开始查找名为nmap的文件或目录,不区分大小写。
· find / -name “nmap” -exec cp {} /tmp/ \;:从根目录开始查找名为nmap的文件或目录,并将之复制到/tmp/目录下。
19)、whereis:查找软件的位置,范围有限。
· whereis -b nmap:查找二进制格式的nmap的位置。
· 通过apt-get等包管理工具安装软件的路径都会放入本地的一个数据库中,whereis就是通过这个数据库查找软件的位置。
· 如果才安装了软件,需要更新数据库:updatedb,就可以用whereis查到了。
· 如果软件是通过源码安装,软件的路径不会写进数据库中,通过whereis查不到。
20)、echo:打印一行文本。
· -n表示打印文本不换行。
21)、vi:linux中的文本编辑器。
命令模式:dd表示删除一行,o表示在光标位置插入空行(后面的行下移),u表示撤回上一步编辑,y表示复制当前行,p表示将复制的行粘贴到光标所在行(后面的行下移),i表示进入编辑模式,/表示查找指定文本内容,:wq表示保存退出,:q表示不保存退出,:q!表示强制退出,:wq!表示强制保存退出。
三、关于shell脚本
1、一次执行多条命令的符号:
1)、|:将前面命令的输出作为后面命令的输入。
2)、&:依次执行前后的命令。
3)、&&:先执行前面的命令,执行成功了才执行后面的命令。
4)、||:前面的命令执行失败才执行后面的命令。
2、shell脚本编写:
1)、打印输入内容:
!/bin/bash #该脚本使用/bin/bash解释器执行
echo -n “IP: ” #打印文本不换行
read ip #用参数ip接收输入数据
echo “Your ip is: $ip” #打印文本
2)、打印99乘法表:
image.png
3)、检测某一网段能够ping的IP:
image.png
4)、检测文件中的ip地址下面的端口是否开启: