RDP日志取证与清除
注意:本文乃阅读文章所写的笔记
原文链接在:
https://mp.weixin.qq.com/s?__biz=Mzg4MzA4Nzg4Ng==&mid=2247483915&idx=1&sn=c362bdbde3cde022c1ea10de6229eb4c&chksm=cf4d8d6af83a047c351194957f8b368f41531279c08e6035e16b0b6b85f873f1ade52208738e&mpshare=1&scene=23&srcid=&sharer_sharetime=1569592419145&sharer_shareid=64458b89777349122de4fc747d336e14#rd
RDP登录方式
- 爆破登录:多次登录失败&登录成功
- 管理员登录:账号密码、凭据
- console登录
用到的工具
- wevtutil (系统自带)
- LogParser
- powershell (系统自带)
- regedit (系统自带)
取证关键点
- 登录IP
- 登录IP和端口
- 登录时间
- 登录客户端和主机名
- 登录后操作日志
- 服务端敏感文件
- 服务端登录的服务器IP
- 服务端浏览器记录
登录成功
EventID=4624,从安全日志中获取登录成功的客户端登录IP、登录源端口、登录时间等信息
显示凭证登录
EventID=4648
常用的事件ID
LogParser用法
H:\日志分析器>LogParser.exe -i:EVT -o:DATAGRID "SELECT TimeGenerated as LoginTim
e,EXTRACT_TOKEN(Strings,5,'|') as username,EXTRACT_TOKEN(Strings, 8, '|') as Log
onType,EXTRACT_TOKEN(Strings, 17, '|') AS ProcessName,EXTRACT_TOKEN(Strings, 18,
'|') AS SourceIP FROM C:\Users\jiushi\Desktop\test.evtx where EventID=4624"
要查询别的事件的话改ID就好了,记得将evtx的路径换成自己的路径
LogParser的参数说明
- -i:输入文件的格式
- -o:输出格式
- sql语句
完整的语句格式:
LogParser –i:输入文件的格式 –o:输出格式 “SQL语句”
SQL查询语句分析:
SELECT TimeGenerated as LoginTim
e,EXTRACT_TOKEN(Strings,5,'|') as username,EXTRACT_TOKEN(Strings, 8, '|') as Log
onType,EXTRACT_TOKEN(Strings, 17, '|') AS ProcessName,EXTRACT_TOKEN(Strings, 18,
'|') AS SourceIP
- TimeGenerated –生成时间
- LoginTime –登录时间
- username –登录的usernaem
- LogonType –登录类型
- ProcessName –进程名
- 8 SourceIP –来源IP
- EXTRACT_TOKEN(Strings,数字,’|’) –提取令牌,这个好像是用来隔开的
上述所说的表名出自日志里的xml
例如添加个UserId上去,语句就别成了
H:\日志分析器>LogParser.exe -i:EVT -o:DATAGRID "SELECT TimeGenerated as LoginTim
e,EXTRACT_TOKEN(Strings,5,'|') as username,EXTRACT_TOKEN(Strings, 8, '|') as Log
onType,EXTRACT_TOKEN(Strings, 17, '|') AS ProcessName,EXTRACT_TOKEN(Strings, 18,
'|') as UserSid,EXTRACT_TOKEN(Strings, 19, '|') AS SourceIP FROM C:\Users\jius
hi\Desktop\test.evtx where EventID=4720"
具体sql构造得参考xml
提取RDP登录日志
EventID=4624/4625
C:\Users\jiushi\Desktop>wevtutil epl Microsoft-Windows-TerminalServices-LocalSes
sionManager/Operational ./LocalSessionManager.evtx
客户登录日志
EventID=1024
wevtutil epl Microsoft-Windows-TerminalServices-RDPClient/Operational ./ClientActiveXCore.evtx
注册表取证
使用py来查询注册表得到需要的信息
#@author:九世
#@time:2019/9/28
#@file:qz.py
import winreg
class Diaocha(object):
def __init__(self):
self.path=winreg.HKEY_USERS
def client_name(self):
data=''
datas=''
jg=[]
jg2=[]
try:
key=winreg.OpenKey(self.path,None,0,winreg.KEY_ALL_ACCESS)
ckey=winreg.QueryInfoKey(key)[0]
for c in range(int(ckey)):
name=winreg.EnumKey(key,c)
if len(name)>8 and len(name)<54:
jg.append(name)
winreg.CloseKey(key)
dk=winreg.OpenKey(self.path,'{}\\Volatile Environment'.format(jg[0]),0,winreg.KEY_ALL_ACCESS)
yk=winreg.QueryInfoKey(dk)[0]
for v in range(yk):
gs=winreg.EnumKey(dk,v)
dv=winreg.OpenKey(self.path,'{}\\Volatile Environment\\{}'.format(jg[0],gs),0,winreg.KEY_ALL_ACCESS)
qzhi_value=winreg.QueryValueEx(dv,'SESSIONNAME')
client_naems=winreg.QueryValueEx(dv,'CLIENTNAME')
data+='会话名称:{}'.format(qzhi_value[0])
data+=' 登录本机的客户端名称:{}'.format(client_naems[0])
winreg.CloseKey(dv)
winreg.CloseKey(dk)
print('[+] :{}'.format(data))
dk = winreg.OpenKey(self.path, '{}\\Software\\Microsoft\\Terminal Server Client\\Servers'.format(jg[0]), 0, winreg.KEY_ALL_ACCESS)
vt=winreg.QueryInfoKey(dk)[0]
for y in range(int(vt)):
values = winreg.EnumKey(dk, y)
jg2.append(values)
winreg.CloseKey(dk)
for u in jg2:
dk=winreg.OpenKey(self.path,'{}\\Software\\Microsoft\\Terminal Server Client\\Servers\\{}'.format(jg[0],u),0,winreg.KEY_ALL_ACCESS)
quzhi=winreg.QueryValueEx(dk,'UsernameHint')[0]
print('[+] 登录过的RDP连接:{} 登录使用的用户名:{}'.format(u,quzhi))
winreg.CloseKey(dk)
dk=winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,'SYSTEM\\CurrentControlSet\\services\\eventlog\\Security')
qz=winreg.QueryValueEx(dk,'MaxSize')[0]
print('[+] 日志最大限制:{}'.format(qz))
winreg.CloseKey(dk)
dk=winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,'System\\CurrentControlSet\\Control\\Terminal Server\\WinStations\RDP-Tcp',0,winreg.KEY_ALL_ACCESS)
portnumber=winreg.QueryValueEx(dk,'PortNumber')[0]
print('[+] 本机RDP端口:{}'.format(portnumber))
winreg.CloseKey(dk)
except Exception as r:
print('Error {}'.format(r))
if __name__ == '__main__':
obj=Diaocha()
obj.client_name()
结果如下:
几个注册表说明
HKEY_USERS\SID\Volatile Environment\X.CLIENTNAME --登录过本机的客户端的Computer名
HKEY_USERS\SID\Software\Microsoft\Terminal Server Client\Servers\* --你登录过的RDP的IP
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Security --日志最大限制
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp --本机RDP端口
清除日志
暴力删除:
1.删除注册表项
2.找到日志直接整个删除(C:\Windows\System32\winevt\Logs\Security_new.evtx)
3.使用恢复软件查询留在系统删除区的文件,在删一次日志
温柔删除:
根据EventID单条删除
wevtutil epl Security C:\Windows\System32\winevt\Logs\Security_new.evtx /q:"*[System[(EventRecordID!=6810)]]" /ow:true
根据IP批量删除
(只是删除了日志里的,注册表里的记录项并没有删)
wevtutil epl Security C:\Windows\System32\winevt\Logs\Security_new.evtx /q:"*[EventData[(Data[@Name='IpAddress']!='127.0.0.1')]]" /ow:true
Github仓库:
https://github.com/422926799/note/tree/master/%E8%87%AA%E5%B7%B1%E5%86%99%E7%9A%84%E5%B7%A5%E5%85%B7/RDP%E5%8F%96%E8%AF%81
参考链接:
[RDP日志取证与清除](
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
文章标题:RDP日志取证与清除
本文作者:九世
发布时间:2019-09-28, 17:10:36
最后更新:2019-09-28, 17:12:05
原始链接:http://jiushill.github.io/posts/896062dd.html版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。