蓝队溯源手册溯源篇

溯源手册

本溯源手册,分技巧与实战两大篇幅旨在帮助大家可以快速上手并在实战中运用,
也可充当字典的作用,在溯源过程中可以翻一翻,更全面的溯源,故某些内容可
能会简化。

技巧篇

通常情况下,接到溯源任务时,获得的信息如下

攻击时间攻击IP预警平台攻击类型恶意文件受攻击域/IP攻击 IP、攻击类型、恶意文件、攻击详情是溯源入手的点。通过攻击类型分析攻击详情的请求包,看有没有攻击者特征,通过获取到的 IP地址进行威胁情报查询来判断所用的 IP具体是代理 IP还是真实 IP地址。如端口扫描大概率为个人 vps或空间搜索引擎,在接到大量溯源任务时可优先溯源。如爬虫大概率为空间搜索引擎,可放到最后溯源。如恶意文件可获得 c2地址、未删除的带有敏感信息的代码(如常用 ID、组织信息,持续化控制代码(C2地址指在 APT攻击里的命令与控制,若获取到 C2地址可以使我们的溯源目标更有针对性)持续化控制代码需要详细分析,如采用 DGA域名上线的方法,分析出域名算法,预测之后的域名可有效减少损失,增加溯源面。

溯源结果框架

在受到攻击、扫描之后,进行一系列溯源操作后,理想情况下想要获得如下数据,来刻画攻击者画像。姓名/ID:攻击 IP:地理位置:QQ:微信:邮箱:手机号:支付宝:IP地址所属公司:IP地址关联域名:其他社交账号信息(如微博/src/id证明):人物照片:跳板机(可选):(ps:以上为最理想结果情况,溯源到名字公司加分最高)在写溯源报告时,应避免单一面石锤,需要反复验证,避免中途溯源错人,各个溯源线索可以串起来,要具有逻辑性。

溯源常用手法

威胁情报平台https://x.threatbook.cn/https://ti.qianxin.com/https://ti.360.cn/https://www.venuseye.com.cn/总结这些威胁情报平台大家可以自行验证,使用方法不做过多解释。https://whois.chinaz.com/reverse?ddlSearchMode=4https://community.riskiq.com/可获得ID姓名邮箱

SSL证书可获得

ID
邮箱

解析记录

通过解析记录可以获得域名 A记录从而获取到域名后的 IP地址。A记录——映射域 bai名到一个或多个 IPCNAME——映射域名到另一个域名(子域名)域名解析记录:http://www.jsons.cn/nslookup/全球 ping,查看现绑定 ip,看是否域名使用了 CDN技术。

http://ping.chinaz.com/fofa钟馗之眼

IP获取信息

反查域名 威胁情报平台 https://www.ipip.net/ip.html https://www.aizhan.com/
https://www.whois.com/ 通过威胁平台可获得是否为移动网络.IDC等,IP所属公司

IP定位

https://chaipip.com/https://www.opengps.cn/Data/IP/ipplus.aspx各类IP定位都需要使用API来进行高精度定位。

重点端口排查,如图

蓝队溯源手册溯源篇

ID/姓名/手机号/邮箱获取信息

手机号/邮箱
查支付宝转账,验证姓名。通过部分平台账号找回密码,可猜手机号。
QQ添加好友搜索微信添加好友搜索https://www.reg007.com/社交平台查找(抖音、脉脉搜索等)。
ID/姓名
谷歌/百度
src搜索
微博搜索
贴吧
搜索社交平台查找(抖音、脉脉搜索等)

恶意文件

恶意文件通常会从邮件的路径获得,可以将邮件全格式保存,用十六进制编辑器查看,可以获得发送邮件 IP地址。

需要准备的工具

逆向类

Ida
JEB
文件编辑类
010 editor
Winhex

网络、进程监控类

processmonitor
Wireshark
科来网络分析系统
SRsniffer

固件分析类

Binwalk
BIN2BMP
PIXD

在线沙箱

微步云沙箱:https://s.threatbook.cn/
奇安信云沙箱:https://sandbox.ti.qianxin.com/sandbox/page
腾讯哈勃:https://habo.qq.com/

常规溯源手法

文件识别
可以使用 16进制解析器载入可执行程序,然后查看是哪种类型的文件。
一般二进制文件的前四个字节为文件格式的 magic,可以通过从网络搜索获得文件的信息,或者使用相关的工具(PEID,file)等进行自动识别。

计算哈希值

哈希是一种用来唯一标识目标程序的常用方法。目标程序通过一个哈希算法,会产生出一段唯一的用于标识这个样本的哈希值,我们可以将这个值理解为是目标程序的指纹。常用的哈希算法有 MD5、Sha-1以及 CRC32等。由于仅仅采用一种算法,特别是 MD5算法,有可能使得不同程序产生同样的哈希结果,所以一般会运用多种哈希验证文件的唯一性。
蓝队溯源手册溯源篇
查找字符串
程序中的字符串就是一串可打印的字符序列,一个程序通常都会包含一些字符串,比如打印输出信息、连接的 URL,或者是程序所调用的 API函数等。从字符串中进行搜索是获取程序功能提示的一种简单方法。(在 IDA和 OD中都可以查找字符串)并不是所有的字符串都是有意义的,但是利用这个结果,也能够给我们的静态分析带来很大的便利了。蓝队溯源手册溯源篇
查找导入函数
如果软件被加壳的话,那么导入表中的函数会很少,所以可以从这里判断文件是否被加壳。如果没有加壳,那么导入表中会列出程序使用的大部分函数(除去程序动态获得的),我们就可以通过这些函数大致判断一下程序的行为。
蓝队溯源手册溯源篇
解析宏
使用 IDA反汇编程序的时候,IDA并不会将宏的名字解析出来,相反,它只会使用宏对应的数字进行显示,如图所示:
蓝队溯源手册溯源篇
如果只看这些数字,完全无法得知什么情况,好在 IDA提供了解析机制,可以将数字转换为宏名。在对应的数字上右键,选择 Enum:
蓝队溯源手册溯源篇
然后在弹出的对话框中选择对应的宏即可。
蓝队溯源手册溯源篇
替换后的结果如下,这样的话,就方便了静态查看代码蓝队溯源手册溯源篇
侦壳操作
病毒木马编写者经常会使用加壳技术来让他们的恶意程序难以被检测或分析。正常的程序总是会包含很多字符串。而加了壳的恶意代码通过分析所得到的可打印字符串就会很少。如果查找出的程序的字符串很少时,那么这个程序就很有可能是加了壳的。此时往往就需要使用其它方法来进一步检测它们的行为。(常用PEiD进行查壳)。
蓝队溯源手册溯源篇
动态调试
使用调试器对病毒进行分析在反病毒工作中扮演着十分重要的角色。调试器允许你查看任意内存地址的内容、寄存器的内容以及每个函数的参数。调试器也允许你在任意时刻改变关于程序执行的任何东西。比如你可以在任意时刻改变一个变量的值——前提是你需要获得关于这个变量足够的信息,包括在内存中的位置。在实际的动态调试过程中,最常用的是 OllyDBG和 WinDbg,前者是病毒分析人员使用最多的调试器,缺点是不支持内核调试,如果想调试内核,WinDbg基本上就是唯一的选择了。虽然 IDA Pro也能够进行动态调试,但是它远远不如 OD方便。因此在实际分析的过程中,往往是将二者结合使用的。因为如果用 IDA Pro在静态分析中遇到了十分抽象的函数,那么用 OD动态地执行一下,该函数的功能往往就能一目了然了。
多线程调试
调试软件时,它每次只能跟一个线程,如果遇到的软件创建了很多线程,那么调试起来就比较麻烦了,本节介绍一下多线程的调试方法。


首先看一下线程创建的函数:
HANDLE CreateThread
(LPSECURITY_ATTRIBUTES lpThreadAttributes,
//SDSIZE_T dwStackSize,//initialstacksize
LPTHREAD_START_ROUTINE lpStartAddress,
//threadfunction
LPVOID lpParameter,
//threadargument
DWORD dwCreationFlags,
//creationoption
LPDWORD lpThreadId//threadidentifier)

重点看第三个和第四个函数,其中第三个参数指定了新线程的入口地址,第四个参数为新线程所需的参数,当程序调用此函数来创建线程的时候,定位到线程的入口地址设置断点,一般情况下,程序会在后面调用 Sleep或WaitForSingleObject函数,这样的话,程序的控制权就到了新线程里面。
蓝队溯源手册溯源篇
如果程序没有调用 Sleep或 WaitForSingleObject函数,那么可以修改函数的代码,强制程序调用这两个函数,这样程序就转到新线程中执行。另一种方法是修改程序的 EIP,使其指向新线程入口,如果有参数的话,还要修改寄存器的值,使其指向参数地址,不过这种方法可能会造成寄存器内容不正确,环境异常,从而造成程序执行崩溃。
还有一种方法来调试多线程。如果程序多次调用 CreateThread,确定一个我们打算调试的线程,并让这个线程创建成功,当程序再调用 CreateThread创建线程的时候,直接修改此函数,让它直接返回,这样就不会再创建线程了,我们就可以只调试一个线程。
调试子进程
有些样本并不是单独运行的,它在运行过程中可能会创建子进程来完成恶意功能,遇到这种情况,就需要进入子进程中进行调试。
如果父进程创建子进程时是以 suspended的方式创建的,那么父进程会向子进程进行代码注入,写入之后会调用 ResumeThread函数恢复子进程的运行。遇到这种情况,要确定父进程写入代码的地址,当代码写入之后,调用 ResumeThread恢复子进程运行前,附加到子进程中,在代码注入的地址下断点并 F9让子进程运行。这时再回到父进程中,运行函数 ResumeThread,这样子进程就可以断在代码注入的地址了。
还有一种创建子进程的方式,就只是简单的开启一个子进程运行,这种情况比较简单,需要注意的一点就是父进程创建子进程时传给子进程的参数,使用 OD打开要运行的子进程,传入所需的参数即可开始调试。

跳板机

一般跳板机大多数为黑客的全网漏洞扫描脚本批量攻击拿下的肉鸡,故其比较容易拿下。不排除黑客通过定点、手动攻击、购买等途径获得的跳板机。进行全端口探测,尝试默认密码、找 Web服务进行攻击。些影响范围广泛、利用简单的漏洞如:Phpstudy后门、Weblogic漏洞、Struts2漏洞、路由器监控摄像器等终端漏洞。遇到 CS server可通过 csbruter工具爆破密码。
常见的日志分析工具:
windows:logparser
linux:主要为一些命令的使用例:split sed cat sort uniq awk等
Linux
端口查询
使用 netstat网络连接命令,分析可疑端口、IP、PID部分系统可使用 lsof -i查看下 pid所对应的进程文件路径,运行
ls -l /proc/$PID/exe

file /proc/$PID/exe
($PID为对应的 pid号)
进程查询
使用 ps命令,分析进程
ps aux | grep pid

定时任务
利用 crontab查询创建的定时任务。
基本命令
crontab -l列出某个用户 cron服务的详细内容
默认编写的crontab文件会保存在 (/var/spool/cron/用户名例如: /var/spool/cron/root
crontab -r删除每个用户 cront任务(谨慎:删除所有的计划任务)
crontab -e使用编辑器编辑当前的 crontab文件
如:*/1 * * * * echo “hello world” >> /tmp/test.txt每分钟写入文件
2、利用 anacron命令实现异步定时任务调度使用案例每天运行 /home/backup.sh脚本:vi /etc/anacrontab
@daily 10 example.daily /bin/bash /home/backup.sh
当机器在 backup.sh期望被运行时是关机的,anacron会在机器开机十分钟之后运行它。
历史命令
root用户的历史命令histroy
打开 /home各帐号目录下的 .bash_history,查看普通帐号执行的历史命令。为历史的命令增加登录的 IP地址、执行命令时间等信息:
保存 1万条命令


sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile

在/etc/profile的文件尾部添加如下行数配置信息:


USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`if [ "$USER_IP" = "" ]thenUSER_IP=`hostname`fiexport HISTTIMEFORMAT="%F %T $USER_IP `whoami` "shopt -s histappendexport PROMPT_COMMAND="history -a"

source /etc/profile让配置生效
用户
who查看当前登录用户(tty本地登陆 pts远程登录)
w查看系统信息,想知道某一时刻用户的行为
uptime查看登陆多久、多少用户,负载状态
1、用户信息文件


/etc/passwdroot:x:0:0:root:/root:/bin/bashaccount:password:UID:GID:GECOS:directory:shell

用户名:密码:用户 ID:组 ID:用户说明:家目录:登陆之后的 shell
!!!无密码只允许本机登陆,远程不允许登陆
2、影子文件 /etc/shadow每个:为一次分割


root:$6$oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft7ql1WpkopY0UV9ajBwUt1DpYxTCVvI/:16809:0:99999:7:::

用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码
修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留
蓝队溯源手册溯源篇
Web访问日志通常为 access.log文件可以使用 find命令进行查找,查找最近修改过的文件命令


find ./* -mmin -5 Tips: mmin分钟 mtime天

小技巧
登陆成功的IP有哪些:


grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
登录成功的日期、用户名、IP:
grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'

Webshell查找
webshell:http://www.shellpub.com
检测系统账号安全
1、查看服务器是否存在可疑账号、新增账号。
检查方法:打开 cmd窗口,输入 lusrmgr.msc命令,查看是否有新增/可疑的账号,如有管理员群组的(Administrators)里的新增账户,如有,请立即禁用或删除掉。
2、查看服务器是否存在隐藏账号、克隆账号。
打开注册表,查看管理员对应键值。
使用 D盾_web查杀工具,集成了对克隆账号检测的功能。
3、结合日志,查看管理员登录时间、用户名是否存在异常。
检查方法:
Win+R打开运行,输入”eventvwr.msc”,回车运行,打开“事件查看器”。
导出 Windows日志 –安全,利用微软官方工具 Log Parser进行分析。
端口查询
1、检查端口连接情况,是否有远程连接、可疑连接。
使用 netstat -ano命令查看目前的网络连接,定位可疑的 ESTABLISHED
根据 netstat命令定位出的 PID编号,再通过 tasklist命令进行进程定位 tasklist |findstr “PID”
进程查询
开始 –运行 –输入 msinfo32命令,依次点击 “软件环境 –正在运行任务”就可以查看到进程的详细信息,比如进程路径、进程 ID、文件创建日期以及启动时间等。
打开 D盾_web查杀工具,进程查看,关注没有签名信息的进程。
通过微软官方提供的 Process Explorer等工具进行排查。
查看可疑的进程及其子进程。可以通过观察以下内容:
没有签名验证信息的进程
没有描述信息的进程
进程的属主
进程的路径是否合法
CPU或内存资源占用长时间过高的进程
小技巧:
查看端口对应的 PID:
netstat -ano | findstr "port"

查看进程对应的 PID:任务管理器 –查看 –选择列 – PID或者


tasklist | findstr"PID"

查看进程对应的程序位置:
任务管理器 –选择对应进程 –右键打开文件位置
运行输入 wmic,cmd界面输入 process
tasklist /svc进程 – PID –服务
查看 Windows服务所对应的端口:

%systemroot%/system32/drivers/etc/services
(一般 %systemroot%就是 C:Windows路径

检查启动项、计划任务、服务

检查服务器是否有异常的启动项。
登录服务器,单击【开始】>【所有程序】>【启动】,默认情况下此目录在是一个空目录,确认是否有非业务程序在该目录下。
单击开始菜单 >【运行】,输入 msconfig,查看是否存在命名异常的启动项目,是则取消勾选命名异常的启动项目,并到命令中显示的路径删除文件。
单击【开始】>【运行】,输入 regedit,打开注册表,查看开机启动项是否正常,特别注意如下三个注册表项:


HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion
un
HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun
HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunonce

webshell
使用 D盾进行全盘扫描,对脚本文件进行人工判断。

© 版权声明

相关文章

暂无评论

none
暂无评论...