如何通过审计安全事件日志检测密码喷洒(Password Spraying)攻击

如何通过审计安全事件日志检测密码喷洒(Password Spraying)攻击

许多渗透测试人员和攻击者通常都会使用一种被称为“密码喷洒(Password Spraying)”的技术来进行测试和攻击。对密码进行喷洒式的攻击,这个叫法很形象,因为它属于自动化密码猜测的一种。这种针对所有用户的自动密码猜测通常是为了避免帐户被锁定,因为针对同一个用户的连续密码猜测会导致帐户被锁定。所以只有对所有用户同时执行特定的密码登录尝试,才能增加破解的概率,消除帐户被锁定的概率。

攻击者首先会从他们已有的密码列表开始尝试,并以最脆弱的密码开始(“Fall2017”,“Winter2018”“123456”等)入手。

关于“密码喷洒(Password Spraying)”的概念,我是在BSidesCharm 2017的有关“如何检测难以寻找的攻击活动目录”的演讲中提到的。

当密码开始喷洒时,往往会从列表中的第一个密码开始。第一个密码用于尝试对活动目录中的每个用户进行身份验证。针对活动目录中的每个用户,攻击者都会尝试用这个密码进行登录,并且当所有用户都使用该密码进行了测试后,就会自动转到下一个密码,执行重复的测试。

由于活动目录中的每个用户的测试上限次数都会是5次,因此攻击者会为每个用户进行4个不同密码的尝试。此时msDS-LockoutObservationWindow,设置复位帐户锁定计数器为0:00:30:00(30分钟)。至于如何收集有关活动目录环境的密码策略的信息并使密码喷洒工具自动适应这些信息,对攻击者来说是小菜一碟。

如何通过审计安全事件日志检测密码喷洒(Password Spraying)攻击

上图显示了测试者是如何使用AD PowerShell cmdlet Get-ADDefaultDomainPasswordPolicy cmdlet.来显示实验室域环境的域密码策略的,应该说,这种策略在大多数情况下都适用,因为用户的密码设置,往往都非常地脆弱。比如,用户的密码通常是一些小于10位的纯数字。

由于密码喷洒通常连接到SMB共享或网络服务,因此让我先从连接到PDC的netlogon共享(\\PDC\ netlogon)开始分析,该共享在许多网络中很常见。在密码喷洒运行一段时间后,我会发现许多用户的密码,这些用户密码也可能包含特权帐户。

下图就是我自己编写的一个快速PowerShell脚本的密码喷洒:

如何通过审计安全事件日志检测密码喷洒(Password Spraying)攻击

在域控制器上针对SMB的密码喷洒会导致域控制器上的记录事件ID 4625表示为“登录失败”,并且大多数事件都会显示在记录日志中,因此发生这种情况时,应该能够检测到。

如何通过审计安全事件日志检测密码喷洒(Password Spraying)攻击

上图显示了在密码喷洒的过程中,在域控制器上的登录事件ID 4625。然而,目前许多组织还没有创建关联规则,如果在发生密码喷洒的过程中,发生登录事件ID 4625,就会发生密码喷洒。

如何通过审计安全事件日志检测密码喷洒(Password Spraying)攻击

上图显示在密码喷洒的过程中,我在实验室域环境中所记录的众多事件ID 4625。不过,还有另一种方法可以在活动目录中发现密码喷洒。由于每个用户帐户都有一个名为“Bad-Password-Time”的关联属性,该属性在使用Active Directory PowerShell cmdlet Get-ADUser时显示为“lastbadpasswordtry”。它可以显示出黑客尝试登录该帐户的最后一个错误密码的日期和时间。运行以下PowerShell cmdlet可显示活动目录域中具有与错误密码尝试相关的属性的用户。

get-aduser -filter * -prop lastbadpasswordattempt,badpwdcount | select name,lastbadpasswordattempt,badpwdcount | format-table –auto

如何通过审计安全事件日志检测密码喷洒(Password Spraying)攻击

上图显示在我实施密码喷洒后,实验室域环境中的具有lastbadpasswordattempt和badpwdcount属性的活动目录用户帐户。

你可以注意一下上面显示的PowerShell命令的结果,所有错误的密码尝试都是在同一分钟内进行的,其中大多数都是在几秒钟内,这个现象很不寻常。

由于攻击者可以通过更改他们连接的服务来避免事件ID 4625被记录,所以我并不是连接到SMB,而是连接到域控制器上的LDAP服务的。这样一来,ID 4625就可能躲过记录。

如何通过审计安全事件日志检测密码喷洒(Password Spraying)攻击

上图显示当针对LDAP进行密码喷洒时,你是发现不了事件ID 4625的。

由于目前许多网络安防组织都会通过监控事件ID 4625,来保护网络。所以为了避免被监测到,攻击者可能会连接到LDAP服务进行密码喷洒。但前提是你,他们需要将Kerberos 事件日志记录记录到事件ID 4771中,并监视“Kerberos预验证失败”。在事件ID 4771中,验证失败的话,会用代码 “0x18”表示。

如何通过审计安全事件日志检测密码喷洒(Password Spraying)攻击

上图就是显示的事件ID 4771,当根据LDAP进行密码喷洒时,就会在域控制器上启用Kerberos日志记录时记录该事件。

当攻击者在一个域连接的计算机上使用密码喷洒时,会记录到事件ID 4648(“尝试使用显式凭据登录”)。有许多4648事件显示,一个叫做Joe的用户多次尝试登录并使用“Alexis Phillips”或“Christopher Kelley”或whomever的密码,并且这些记录在几秒钟内就被记录下来。所以,这种类型的活动是不寻常的。

以下四个图显示在执行密码喷洒的工作站上记录的事件ID 4648,不过必须启用审计日志记录才能记录该事件ID。

如何通过审计安全事件日志检测密码喷洒(Password Spraying)攻击

如何通过审计安全事件日志检测密码喷洒(Password Spraying)攻击

如何通过审计安全事件日志检测密码喷洒(Password Spraying)攻击

如何通过审计安全事件日志检测密码喷洒(Password Spraying)攻击

如何对密码喷洒进行检测?

密码喷洒发生在许多活动目录环境中,并且可以通过适当的日志记录启用和有效关联来检测。

检测的主要方法包括:

1.启用适当的日志记录:

1.1域控制器:事件ID 4625的“审计登录”(成功与失败)。

1.2域控制器:事件ID 4771的“审计Kerberos验证服务”(成功与失败)。

1.3所有系统:事件ID 4648的“审计登录”(成功与失败)。

2.在1分钟内配置50 4625多个事件的警报。

3.在1分钟内为50 4771多个事件的警报的设置失败代码“0x18”。

4.在1分钟内为工作站上的100 4648多个事件配置警报。

5.根据以下命令,编写一个每天运行的PowerShell脚本并报告可能的密码喷洒:

get-aduser -filter * -prop lastbadpasswordattempt,badpwdcount | select name,lastbadpasswordattempt,badpwdcount | format-table –auto。

每个警报规则都需要根据你的运行环境进行调整,具体方法就是增加警报的数量或缩短警报的时间。

转载于:https://www.cnblogs.com/wushangguo/p/9099622.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一题(39)—— sizeof

以下代码中的两个sizeof用法有问题吗&#xff1f; void UpperCase(char str[]) {for(size_t i 0; i < sizeof(str)/sizeof(str[0]); i){str[i] - (a - A);} }char str[] "aBcDe"; cout << "str字符长度为: " << sizeof(str)/sizeof(str[…

IT综合管理 新时期的运维管理思路

IT运维管理给企业带来效益已经有十余载的历史&#xff0c;IT部门也逐步成为为企业的重要支撑部门&#xff0c;通过IT部门管理好企业的网络、桌面、业务、机房环境以及其他IT资源。虽然IT运维管理已经给企业带来了节能增效的实际效益&#xff0c;但这些效益正增着IT规模的与日俱…

单片机编程技巧—状态机编程

摘要&#xff1a;不知道大家有没有这样一种感觉&#xff0c;就是感觉自己玩单片机还可以&#xff0c;各个功能模块也都会驱动&#xff0c;但是如果让你完整的写一套代码&#xff0c;却无逻辑与框架可言&#xff0c;上来就是开始写&#xff01;东抄抄写抄抄。说明编程还处于比较…

啥叫旁路电容?啥叫去耦?可以不再争论了吗

1. 旁路和去耦先谈两个比较重要的概念&#xff1a;旁路电容(Bypass Capacitor)&#xff0c;去耦电容(Decoupling Capacitor)。只要是设计过硬件电路的同学肯定对这两个词不陌生&#xff0c;但真正理解这两个概念的可能并不多。我刚毕业时就问过我的师傅&#xff0c;为什么总是在…

H5活动产品设计指南基础版

本文来自 网易云社区 。 H5一般页面不会很多&#xff0c;看似简单&#xff0c;实际上会有很多细节需要注意&#xff0c;我自己在做过了几个H5之后&#xff0c;发现了一些常犯的问题&#xff0c;做了小结&#xff0c;希望给新开始做H5的产品相关的同学提供一些帮助。 首先说说一…

每日一题(40)—— 字符串常量

下列代码有什么问题&#xff1f; char* s"AAA"; printf("%s",s); s[0]B; printf("%s",s);"AAA"是字符串常量。s是指针&#xff0c;指向这个字符串常量&#xff0c;所以声明s的时候就有问题。 cosntchar* s"AAA"; 然后又因…

下一个天亮

下一个天亮&#xff0c;我们依然是最好的搭档。最初的梦想&#xff0c;永远也从来不曾放弃。谢谢你教会我成长&#xff0c;谢谢你给我的一切。我们要永远这么好下去。加油哦。原来有些话真的只适合烂在心底。我能选择的&#xff0c;从始至终的唯一选择&#xff0c;只有坚强&…

图解丨在嵌入式设备上实现HTTP服务器

您好呀&#xff0c;我是小二。本期为大家带来一个 WiFi 应用的实际场景&#xff0c;其实在之前「我对 WiFi 驱动移植过程&#xff0c;做了一次总结复盘」这篇文章中有简单提过&#xff0c;但由于内容较多&#xff0c;就单独摘出来了。来自读者的催更????????????&a…

maven详解之仓库

在Maven中&#xff0c;任何一个依赖、插件或者项目构建的输出&#xff0c;都可以称之为构件。 Maven在某个统一的位置存储所有项目的共享的构件&#xff0c;这个统一的位置&#xff0c;我们就称之为仓库。&#xff08;仓库就是存放依赖和插件的地方&#xff09; 任何的构件都有…

Linux内核代码,第一次看到这样使用的宏

晚上看内核代码&#xff0c;看到一个有意思的宏&#xff0c;我之前没有见到过&#xff0c;当然&#xff0c;肯定有人见到过&#xff0c;我写出来是给那些没有看到过的人看的。我说是深夜&#xff0c;那就肯定是深夜代码是从内核里面看到的我们正常使用宏是这样的C语言、嵌入式中…

学习笔记三

三、信息安全风险管理的风险评估<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />1、风险评估概述A、风险评估的概念风险评估是信息安全风险管理的第二步&#xff0c;针对确立的风险管理对象所面临的风险进行识别、分析和评价。请…

每日一题(41)—— 数组和链表的区别

数组和链表的区别&#xff1a; 数组&#xff1a;数据顺序存储&#xff0c;固定大小 连表&#xff1a;数据可以随机存储&#xff0c;大小可动态改变

flex柱状图和折线图的混合图使用

<?xml version"1.0"?> <mx:Application xmlns:mx"http://www.adobe.com/2006/mxml"> <mx:Script> <!--[CDATA[ import mx.collections.ArrayCollection; [Bindable] public var data1:ArrayCollectionnew ArrayCollection([{date:&…

给高通提个问题解决为啥那么久?

我第一次接触高通芯片是在中兴那&#xff0c;我们用的是一款很老的芯片&#xff0c;高通的文档非常多&#xff0c;资料非常丰富&#xff0c;如果有问题的话我一般都会从文档里面找答案。但是&#xff0c;但是&#xff0c;并不是所有的问题都是能自己搞定&#xff0c;比如遇到一…

BZOJ4503 两个串 【fft】

题目链接 BZOJ4503 题解 水水题。 和残缺的字符串那题几乎是一样的 同样转化为多项式 同样TLE 同样要手写一下复数才A #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<complex> #include<cmath> #i…

每日一题(42)—— 已知一个数组table,用一个宏定义,求出数据的元素个数

已知一个数组table&#xff0c;用一个宏定义&#xff0c;求出数据的元素个数。 // 总大小除以第一个元素的大小 #define TNTBL (sizeof(table)/sizeof(table[0]))

新公司上班第一天

大家好&#xff0c;文章转自我的朋友helloworld&#xff0c;文中的我并不是我&#xff0c;感谢大家阅读&#xff0c;转载&#xff0c;在看。Hello 各位小伙伴&#xff0c;周一愉快~今天是我到新公司上班的第一天&#xff0c;入职新公司&#xff0c;就好像刚刚谈恋爱一样&#x…

[CTO札记]从Cloud Computing看战略决策:想做、能做与可做 -

1&#xff09;想做--未来方向很多人已经意识到&#xff0c;Cloud Computing未来将是基础设施&#xff0c;扮演水、电、气的角色。可以说&#xff0c;Cloud Computing是很多互联网、电信大公司想做的事。因为&#xff1a;》不仅重要&#xff08;大公司都不想自己的命运掌握在别人…

JAVA基础学习之路(三)类定义及构造方法

类的定义及使用 一&#xff0c;类的定义 class Book {//定义一个类int price;//定义一个属性int num;public static int getMonney(int price, int num) {//定义一个方法return price*num;} }public class test2 {public static void main(String args[]) {Book monney new B…

电子火折子的电路原理

d▲本文要分析的电路看古装剧时&#xff0c;不时可以看到这样的场景&#xff1a;有人从怀里掏出一个“火折子”&#xff0c;对着吹一吹就点着了火&#xff0c;觉得很神奇&#xff1a;更加神奇的是&#xff0c;有才的电子工程师们&#xff0c;重新发明了火折子&#xff0c;也就是…