위협 행위자가 암호 추측 기술을 사용하여 사용자 계정에 액세스합니다. 암호 스프레이 공격에서 위협 행위자가 여러 다른 계정에 대해 가장 많이 사용되는 암호 중 몇 가지에 의존할 수 있습니다. 많은 사용자가 여전히 기본 및 약한 암호를 활용하기 때문에 공격자는 암호 스프레이를 사용하여 계정을 성공적으로 손상합니다.
이 플레이북은 IP 주소가 위험하거나 암호 스프레이 공격과 연결된 인스턴스를 조사하는 데 도움이 되며, 알 수 없는 위치에서 로그인하는 사용자 또는 예기치 않은 MFA(다단계 인증) 프롬프트를 받는 사용자와 같이 의심스러운 설명할 수 없는 활동이 검색된 경우를 조사할 수 있습니다. 이 가이드는 경고를 검토, 처리/관리하고 분류하는 SOC(보안 운영 센터) 및 IT 관리자와 같은 보안 팀을 위한 것입니다. 이 가이드는 경고를 TP(참 긍정) 또는 FP(가양성) 로 신속하게 분류하는 데 도움이 되며, TP의 경우 공격을 수정하고 보안 위험을 완화하기 위해 권장되는 조치를 취합니다.
이 가이드를 사용하는 의도된 결과는 다음과 같습니다.
암호 스프레이 IP 주소와 관련된 경고를 악의적인(TP) 또는 FP(가양성) 활동으로 식별했습니다.
IP 주소가 암호 스프레이 공격을 수행한 경우 필요한 조치를 취했습니다.
경고 조사
이 섹션에는 경고에 대응하고 추가 공격으로부터 organization 보호하기 위해 권장되는 조치를 취하는 단계별 지침이 포함되어 있습니다.
1. 경고 검토
다음은 경고 큐의 암호 스프레이 경고의 예입니다.
즉, 위협 인텔리전스 원본에 따라 무차별 암호 대입 또는 암호 스프레이 시도와 연결될 수 있는 IP 주소에서 발생하는 의심스러운 사용자 활동이 있습니다.
2. IP 주소 조사
IP에서 시작된 활동을 확인합니다.
로그인 시도가 대부분 실패합니까?
로그인 시도 사이의 간격이 의심스러운가요? 자동화된 암호 스프레이 공격은 시도 사이에 일정한 시간 간격이 있는 경향이 있습니다.
MFA 프롬프트를 사용하여 사용자/여러 사용자가 성공적으로 로그인하려고 합니까? 이러한 시도가 존재하면 IP가 악의적이지 않음을 나타낼 수 있습니다.
레거시 프로토콜이 사용되고 있나요? POP3, IMAP 및 SMTP와 같은 프로토콜을 사용하면 암호 스프레이 공격을 수행하려는 시도가 표시될 수 있습니다. 활동 로그에서 사용자 에이전트(디바이스 유형)에서 찾는 것은
Unknown(BAV2ROPC)
레거시 프로토콜의 사용을 나타냅니다. 활동 로그를 볼 때 아래 예제를 참조할 수 있습니다. 이 활동은 다른 활동과 더 관련이 있어야 합니다.그림 1. 디바이스 유형 필드에는 Microsoft Defender XDR 사용자 에이전트가 표시됩니다
Unknown(BAV2ROPC)
.익명 프록시 또는 Tor 네트워크의 사용을 확인합니다. 위협 행위자는 종종 이러한 대체 프록시를 사용하여 정보를 숨기므로 추적하기가 어렵습니다. 그러나 모든 사용이 악의적인 활동과 관련이 있는 것은 아닙니다. 더 나은 공격 지표를 제공할 수 있는 다른 의심스러운 활동을 조사해야 합니다.
IP 주소가 VPN(가상 사설망)에서 오는가요? VPN이 신뢰할 수 있나요? IP가 VPN에서 시작되었는지 확인하고 RiskIQ와 같은 도구를 사용하여 뒤에 있는 organization 검토합니다.
동일한 서브넷/ISP를 사용하여 다른 IP를 확인합니다. 경우에 따라 암호 스프레이 공격은 동일한 서브넷/ISP 내의 여러 IP에서 발생합니다.
IP 주소가 테넌트에서 공통적인가요? 활동 로그를 확인하여 테넌트가 지난 30일 동안 IP 주소를 확인했는지 확인합니다.
테넌트에서 IP에서 발생한 다른 의심스러운 활동 또는 경고를 검색합니다. 검색할 활동의 예로는 성공적으로 로그인한 후 전자 메일 삭제, 전달 규칙 만들기 또는 파일 다운로드가 포함될 수 있습니다.
RiskIQ와 같은 도구를 사용하여 IP 주소의 위험 점수를 확인합니다.
3. 로그인 후 의심스러운 사용자 활동 조사
의심스러운 IP가 인식되면 로그인한 계정을 검토할 수 있습니다. 계정 그룹이 손상되어 IP 또는 기타 유사한 IP에서 로그인하는 데 성공적으로 사용되었을 수 있습니다.
경고 시간 직후의 IP 주소에서 로그인하려는 모든 성공적인 시도를 필터링합니다. 그런 다음 로그인한 후 해당 계정에서 악의적이거나 비정상적인 활동을 검색합니다.
사용자 계정 활동
암호 스프레이 작업 이전 계정의 활동이 의심스럽지 않은지 확인합니다. 예를 들어, 공용 위치 또는 ISP를 기반으로 하는 비정상적인 활동이 있는 경우, 계정이 이전에 사용하지 않았던 사용자 에이전트를 활용하는 경우, 다른 게스트 계정이 생성된 경우, 악의적인 IP에서 로그인한 후 다른 자격 증명이 만들어진 경우 등을 검사.
경고
사용자가 암호 스프레이 작업 전에 다른 경고를 받았는지 확인합니다. 이러한 경고가 있으면 사용자 계정이 손상될 수 있음을 나타냅니다. 예로는 불가능한 여행 경고, 드문 국가/지역의 활동, 의심스러운 이메일 삭제 활동 등이 있습니다.
인시던트
경고가 인시던트를 나타내는 다른 경고와 연결되어 있는지 확인합니다. 그렇다면 인시던트에 다른 참 긍정 경고가 포함되어 있는지 여부를 검사.
고급 헌팅 쿼리
고급 헌팅 은 네트워크에서 이벤트를 검사하고 위협 지표를 찾을 수 있는 쿼리 기반 위협 헌팅 도구입니다.
이 쿼리를 사용하여 악의적인 IP에서 발생한 가장 높은 위험 점수로 로그인하려는 시도가 있는 계정을 찾습니다. 또한 이 쿼리는 해당 위험 점수로 로그인하려는 모든 성공적인 시도를 필터링합니다.
let start_date = now(-7d);
let end_date = now();
let ip_address = ""; // enter here the IP address
AADSignInEventsBeta
| where Timestamp between (start_date .. end_date)
| where IPAddress == ip_address
| where isnotempty(RiskLevelDuringSignIn)
| project Timestamp, IPAddress, AccountObjectId, RiskLevelDuringSignIn, Application, ResourceDisplayName, ErrorCode
| sort by Timestamp asc
| sort by AccountObjectId, RiskLevelDuringSignIn
| partition by AccountObjectId ( top 1 by RiskLevelDuringSignIn ) // remove line to view all successful logins risk scores
이 쿼리를 사용하여 의심스러운 IP가 로그인 시도에서 레거시 프로토콜을 사용하는지 검사.
let start_date = now(-8h);
let end_date = now();
let ip_address = ""; // enter here the IP address
AADSignInEventsBeta
| where Timestamp between (start_date .. end_date)
| where IPAddress == ip_address
| summarize count() by UserAgent
이 쿼리를 사용하여 의심스러운 IP와 연결된 지난 7일 동안의 모든 경고를 검토합니다.
let start_date = now(-7d);
let end_date = now();
let ip_address = ""; // enter here the IP address
let ip_alert_ids = materialize (
AlertEvidence
| where Timestamp between (start_date .. end_date)
| where RemoteIP == ip_address
| project AlertId);
AlertInfo
| where Timestamp between (start_date .. end_date)
| where AlertId in (ip_alert_ids)
이 쿼리를 사용하여 손상된 것으로 의심되는 계정에 대한 계정 활동을 검토합니다.
let start_date = now(-8h);
let end_date = now();
let ip_address = ""; // enter here the IP address
let compromise_users =
materialize ( AADSignInEventsBeta
| where Timestamp between (start_date .. end_date)
| where IPAddress == ip_address
| where ErrorCode == 0
| distinct AccountObjectId);
CloudAppEvents
| where Timestamp between (start_date .. end_date)
| where AccountObjectId in (compromise_users)
| summarize ActivityCount = count() by AccountObjectId, ActivityType
| extend ActivityPack = pack(ActivityType, ActivityCount)
| summarize AccountActivities = make_bag(ActivityPack) by AccountObjectId
이 쿼리를 사용하여 손상된 것으로 의심되는 계정에 대한 모든 경고를 검토합니다.
let start_date = now(-8h); // change time range
let end_date = now();
let ip_address = ""; // enter here the IP address
let compromise_users =
materialize ( AADSignInEventsBeta
| where Timestamp between (start_date .. end_date)
| where IPAddress == ip_address
| where ErrorCode == 0
| distinct AccountObjectId);
let ip_alert_ids = materialize ( AlertEvidence
| where Timestamp between (start_date .. end_date)
| where AccountObjectId in (compromise_users)
| project AlertId, AccountObjectId);
AlertInfo
| where Timestamp between (start_date .. end_date)
| where AlertId in (ip_alert_ids)
| join kind=innerunique ip_alert_ids on AlertId
| project Timestamp, AccountObjectId, AlertId, Title, Category, Severity, ServiceSource, DetectionSource, AttackTechniques
| sort by AccountObjectId, Timestamp
권장 작업
- 공격자의 IP 주소를 차단합니다.
- 사용자 계정의 자격 증명을 다시 설정합니다.
- 손상된 계정의 액세스 토큰을 취소합니다.
- 레거시 인증을 차단합니다.
- 계정 보안을 강화하고 공격자에게 암호 스프레이 공격에 의한 계정 손상을 어렵게 만들려면 가능한 경우 사용자에게 MFA가 필요합니다.
- 필요한 경우 손상된 사용자 계정의 로그인을 차단합니다.
참고 항목
팁
더 자세히 알아보고 싶으신가요? Microsoft 기술 커뮤니티인 Microsoft Defender XDR 기술 커뮤니티에서 Microsoft Security 커뮤니티에 참여하세요.