Windows는 로그인에 실패할 때마다 보안 로그에 이벤트 ID 4625(계정 로그온 실패)를 남깁니다. 무차별 대입 공격을 확인할 때 가장 먼저 보는 기록입니다.
이벤트 뷰어에서 보기
eventvwr.msc를 실행합니다.- Windows 로그 > 보안을 엽니다.
- 오른쪽 현재 로그 필터링에서 이벤트 ID에
4625를 넣습니다.
눈여겨볼 항목
- 로그온 유형: 원격 데스크톱은 보통
10(원격 대화형)이나, 네트워크 수준 인증(NLA)을 쓰면3(네트워크)으로 남습니다.2는 서버 앞에서 직접 로그인한 경우입니다. - 실패한 계정 이름: administrator, admin, test처럼 흔한 이름이 계속 바뀌며 나온다면 무차별 대입입니다.
- 원본 네트워크 주소: 시도한 쪽의 IP입니다. 공유기 NAT 뒤에 서버가 있으면 모두 공유기 내부 IP로 보일 수 있으니, 이 경우 장비에서 원래 IP가 전달되도록 설정해야 합니다.
- 실패 이유와 상태 코드:
0xC000006A는 비밀번호 오류,0xC0000064는 없는 사용자 이름입니다.
PowerShell로 최근 기록 뽑기
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625} -MaxEvents 50 |
ForEach-Object {
$x = [xml]$_.ToXml()
$d = @{}; $x.Event.EventData.Data | ForEach-Object { $d[$_.Name] = $_.'#text' }
[pscustomobject]@{ Time = $_.TimeCreated; User = $d.TargetUserName; IP = $d.IpAddress; Type = $d.LogonType }
} | Format-Table
IP별로 몇 번 실패했는지 보려면 끝을 Group-Object IP | Sort-Object Count -Descending로 바꾸면 됩니다.
4625가 하나도 없다면
로그온 실패 감사가 꺼져 있을 수 있습니다. 관리자 명령 프롬프트에서 아래 명령으로 켭니다.
auditpol /set /subcategory:"{0CCE9215-69AE-11D9-BED3-505054503030}" /failure:enable
GUID로 지정하면 Windows 표시 언어와 관계없이 "로그온" 하위 범주를 켤 수 있습니다. 도메인에 가입된 서버는 그룹 정책이 이 설정을 다시 덮어쓸 수 있으니, 도메인 관리자와 정책을 확인하세요.
LogonShield로 자동화하기
LogonShield는 이 글에서 설명한 로그인 실패 기록을 실시간으로 읽고, 정해진 횟수를 넘긴 IP를 Windows 방화벽 규칙에 넣었다가 시간이 지나면 저절로 뺍니다. RDP, MS-SQL, FTP, OpenSSH, 메일 서버 등 13개 서비스를 지원합니다.