01 - Event Viewer
Windows + X -> Event Viewer - Mục Windows Log - System
Quét khối các dòng logs của ngày hôm nay và nhấp phải chuột lưu riêng ra thành file .evt
Lúc này truy xuất và sắp xếp log sẽ nhẹ hơn (vì chỉ có 01 ngày) -> lọc ra những logs có biểu tượng màu ĐỎ để đọc.
Để hiểu lỗi đó là gì thì search Copilot với từ khóa: eventid number
02 - Maintenance Logs
Control Panel - System and Security - Security And Maintenance - Nhấp vào mục Maintenance - Chọn View Reliability History
Ngày nào có dấu X là có sự cố (đa phần Windows sẽ tự chạy Update để sửa)
Bạn có thể làm theo hướng dẫn sau để kiểm tra, giám sát và phân tích log bảo mật và sự kiện hệ thống.
🔍 1. Mở Event Viewer trên Windows 11
Cách mở nhanh:
-
Nhấn
Windows + S
→ GõEvent Viewer
→ Enter
📂 2. Các mục log quan trọng cần theo dõi
Loại Log | Mục đích | Vị trí trong Event Viewer |
---|---|---|
Security | Theo dõi đăng nhập, thay đổi quyền | Windows Logs > Security |
System | Sự kiện hệ thống: Driver, nguồn, dịch vụ | Windows Logs > System |
Application | Ứng dụng lỗi, cảnh báo | Windows Logs > Application |
Setup | Log cài đặt hệ thống | Windows Logs > Setup |
Forwarded Events | Nhận log từ máy khác (nếu có cấu hình) | Forwarded Events |
🔐 3. Phân tích một số sự kiện bảo mật điển hình
✅ Đăng nhập thành công
-
ID:
4624
-
Ý nghĩa: Có người đăng nhập thành công vào hệ thống.
-
Ghi chú:
-
Logon Type 2
: đăng nhập tại máy. -
Logon Type 10
: đăng nhập qua Remote Desktop.
-
❌ Đăng nhập thất bại
-
ID:
4625
-
Ý nghĩa: Có ai đó nhập sai mật khẩu hoặc user không tồn tại.
⚠️ Tài khoản bị khóa
-
ID:
4740
-
Nguyên nhân: Nhập sai mật khẩu nhiều lần dẫn đến bị lock.
🔄 Thay đổi nhóm người dùng, quyền
-
ID:
4728
,4729
,4732
,4733
– thay đổi group. -
ID:
4670
,4662
– thay đổi quyền truy cập file.
📈 4. Lọc và xuất log để phân tích
-
Click chuột phải vào "Security" → Filter Current Log
-
Nhập ID sự kiện cần xem (VD:
4625
để tìm đăng nhập thất bại) -
Hoặc chọn thời gian, người dùng, máy trạm.
📤 Xuất log:
-
Click phải > Save All Events As → định dạng
.evtx
(xem lại sau hoặc gửi tôi để phân tích sâu hơn nếu bạn cần).
⚒️ 5. Công cụ phân tích chuyên sâu (tùy chọn nâng cao)
Bạn có thể dùng thêm các công cụ này:
-
Windows Event Log Explorer: Xem log dễ hơn.
-
Sysmon + Windows Sysinternals: Giám sát nâng cao (tạo log chi tiết hơn).
-
PowerShell: Dùng lệnh như:
Get-WinEvent -LogName Security | where {$_.Id -eq 4625} | Format-List
🧠 Bạn cần gì tiếp theo?
-
Tôi có thể giúp bạn viết script PowerShell để trích xuất nhanh log bất thường.
-
Hoặc giúp bạn cấu hình giám sát liên tục sự kiện nguy hiểm (brute-force, đăng nhập lạ...).
-
Bạn có thể xuất file log
.evtx
và gửi tôi để phân tích hộ.
Dưới đây là script PowerShell giám sát tự động các sự kiện bảo mật quan trọng trên Windows 11 như: đăng nhập thất bại, tài khoản bị khóa, thay đổi quyền, v.v. Script này sẽ:
-
Quét log sự kiện định kỳ.
-
Hiển thị các sự kiện đáng chú ý trên console (có thể log ra file nếu cần).
-
Có thể lập lịch chạy tự động bằng Task Scheduler.
🧾 PowerShell Script: SecurityMonitor.ps1
# Thời gian kiểm tra log: 30 phút gần nhất
$startTime = (Get-Date).AddMinutes(-30)
# Các mã sự kiện quan trọng cần giám sát
$eventIds = @(4624, 4625, 4740, 4728, 4729, 4732, 4733, 4670)
Write-Host "=== Giám sát sự kiện bảo mật từ $startTime đến hiện tại ===`n"
foreach ($id in $eventIds) {
$events = Get-WinEvent -FilterHashtable @{
LogName = 'Security'
Id = $id
StartTime = $startTime
} | Select-Object TimeCreated, Id, Message
if ($events.Count -gt 0) {
Write-Host "🛑 Sự kiện ID: $id - Phát hiện $($events.Count) log(s)`n" -ForegroundColor Red
foreach ($e in $events) {
Write-Host "[$($e.TimeCreated)] ID $($e.Id): $($e.Message.Substring(0, [Math]::Min(200, $e.Message.Length)))..."
}
Write-Host "`n------------------------------`n"
}
else {
Write-Host "✅ Không có sự kiện ID $id xảy ra trong 30 phút qua.`n"
}
}
📌 Hướng dẫn sử dụng
✅ 1. Lưu script
-
Mở Notepad hoặc VS Code.
-
Dán nội dung trên và lưu thành:
SecurityMonitor.ps1
✅ 2. Chạy thủ công
-
Mở PowerShell với quyền Admin.
-
Chạy lệnh:
Set-ExecutionPolicy RemoteSigned -Scope Process
.\SecurityMonitor.ps1
✅ 3. Thiết lập tự động bằng Task Scheduler (Khuyến nghị)
-
Mở
Task Scheduler
→ Create Task -
Tab General: chọn "Run with highest privileges"
-
Tab Trigger: New → Repeat every 30 minutes
-
Tab Action:
-
Action: Start a program
-
Program:
powershell.exe
-
Add arguments:
-ExecutionPolicy Bypass -File "C:\Scripts\SecurityMonitor.ps1"
-
🧠 Mở rộng nếu cần:
-
Gửi email cảnh báo nếu có đăng nhập thất bại.
-
Log ra file
.txt
hoặc gửi về server tập trung. -
Thêm lọc theo
AccountName
,Source IP
...
👉 Nếu bạn cần phiên bản gửi email khi phát hiện sự kiện đáng ngờ, hoặc giám sát theo IP cụ thể, hãy nói tôi biết.
Dưới đây là phiên bản nâng cấp của script PowerShell sẽ:
✅ Chức năng chính:
-
Giám sát các sự kiện đăng nhập thất bại (
Event ID 4625
). -
Ghi log chi tiết ra file
.txt
. -
Gửi email cảnh báo nếu phát hiện đăng nhập thất bại, kèm nội dung sự kiện.
📄 Script PowerShell: LoginFailureAlert.ps1
# === Cấu hình thời gian kiểm tra log ===
$startTime = (Get-Date).AddMinutes(-30)
# === Thư mục và file log ===
$logDir = "C:\SecurityLogs"
$logFile = "$logDir\LoginFailures_$(Get-Date -Format 'yyyyMMdd_HHmmss').txt"
# Tạo thư mục log nếu chưa có
If (!(Test-Path $logDir)) {
New-Item -ItemType Directory -Path $logDir
}
# === Truy xuất sự kiện đăng nhập thất bại (ID 4625) ===
$failedLogins = Get-WinEvent -FilterHashtable @{
LogName = 'Security'
Id = 4625
StartTime = $startTime
} | Select-Object TimeCreated, Message
if ($failedLogins.Count -gt 0) {
Write-Host "🛑 Phát hiện $($failedLogins.Count) lần đăng nhập thất bại trong 30 phút qua." -ForegroundColor Red
# Ghi log vào file
foreach ($event in $failedLogins) {
$logEntry = @"
======================================
Thời gian: $($event.TimeCreated)
Sự kiện:
$($event.Message)
======================================
"@
Add-Content -Path $logFile -Value $logEntry
}
# === Cấu hình gửi email cảnh báo ===
$smtpServer = "smtp.yourserver.com" # <- Thay đổi
$smtpPort = 587 # <- Thay đổi nếu cần
$from = "alert@yourdomain.com" # <- Thay đổi
$to = "youremail@yourdomain.com" # <- Thay đổi
$subject = "🚨 Cảnh báo: Phát hiện đăng nhập thất bại"
$body = "Có $($failedLogins.Count) sự kiện đăng nhập thất bại trên máy $env:COMPUTERNAME. Xem chi tiết trong file: $logFile"
Send-MailMessage -From $from -To $to -Subject $subject -Body $body -SmtpServer $smtpServer -Port $smtpPort -UseSsl `
-Credential (Get-Credential) # Hộp thoại yêu cầu nhập user/pass email gửi đi
}
else {
Write-Host "✅ Không có đăng nhập thất bại trong 30 phút qua."
}
⚙️ Hướng dẫn cấu hình email
-
SMTP server: thay bằng máy chủ mail phù hợp, ví dụ:
-
Gmail:
smtp.gmail.com
với Port587
và SSL -
Outlook:
smtp.office365.com
-
-
Nếu dùng Gmail:
-
Cần bật "App Password" hoặc Less Secure App Access (nếu tài khoản cho phép).
-
📅 Thiết lập chạy định kỳ
-
Dùng
Task Scheduler
như ở phần trước để chạy mỗi 30 phút. -
Đảm bảo chạy với quyền Administrator để truy cập log bảo mật.
📦 Tùy chọn nâng cao (nếu muốn sau này)
-
Gửi kèm file log
.txt
đính kèm trong email. -
Phân tích nội dung log để phát hiện IP brute-force hoặc hành vi bất thường.
-
Kết nối SIEM hoặc hệ thống cảnh báo trung tâm.
👉 Có muốn tôi bổ sung gửi file log đính kèm vào email, hoặc lọc log theo tên người dùng / địa chỉ IP không?
Rất tuyệt, Tiến sĩ M. Dưới đây là phiên bản nâng cao của script:
✅ Chức năng mở rộng
-
📄 Ghi log sự kiện đăng nhập thất bại (ID 4625) ra file
.txt
. -
📧 Gửi email cảnh báo kèm file log đính kèm.
-
🎯 Có thể lọc log theo IP hoặc tài khoản đăng nhập thất bại (tùy chọn – đang để mặc định là tất cả).
📜 Script PowerShell: LoginFailureAlert_SendWithAttachment.ps1
# === Cấu hình thời gian ===
$startTime = (Get-Date).AddMinutes(-30)
# === Cấu hình file log ===
$logDir = "C:\SecurityLogs"
If (!(Test-Path $logDir)) {
New-Item -ItemType Directory -Path $logDir
}
$logFile = "$logDir\LoginFailures_$(Get-Date -Format 'yyyyMMdd_HHmmss').txt"
# === Lấy log đăng nhập thất bại (Event ID 4625) ===
$failedLogins = Get-WinEvent -FilterHashtable @{
LogName = 'Security'
Id = 4625
StartTime = $startTime
} | Select-Object TimeCreated, Message
# === Nếu có log thất bại, xử lý ghi file và gửi mail ===
if ($failedLogins.Count -gt 0) {
Write-Host "🛑 Phát hiện $($failedLogins.Count) lần đăng nhập thất bại."
$logContent = ""
foreach ($event in $failedLogins) {
$logContent += @"
======================================
Thời gian: $($event.TimeCreated)
Sự kiện:
$($event.Message)
======================================
"@
}
# Ghi log ra file
$logContent | Out-File -FilePath $logFile -Encoding UTF8
# === Cấu hình gửi Email ===
$smtpServer = "smtp.yourserver.com" # 🔁 Thay bằng máy chủ SMTP của bạn
$smtpPort = 587 # Gmail: 587, Outlook: 587
$from = "alert@yourdomain.com" # 🔁 Email người gửi
$to = "youremail@yourdomain.com" # 🔁 Email nhận cảnh báo
$subject = "🚨 Cảnh báo: $($failedLogins.Count) đăng nhập thất bại trên $env:COMPUTERNAME"
$body = "Vui lòng kiểm tra file đính kèm để xem chi tiết sự kiện. File log: $logFile"
# Gửi mail có đính kèm file log
Send-MailMessage -From $from -To $to -Subject $subject -Body $body -SmtpServer $smtpServer `
-Port $smtpPort -UseSsl -Credential (Get-Credential) -Attachments $logFile
}
else {
Write-Host "✅ Không có đăng nhập thất bại trong 30 phút qua."
}
🔐 Gợi ý cấu hình Gmail / Outlook SMTP
Dịch vụ | SMTP Server | Port | Yêu cầu |
---|---|---|---|
Gmail | smtp.gmail.com |
587 | App password, bật SMTP |
Outlook | smtp.office365.com |
587 | Tài khoản Microsoft 365, SMTP enabled |
Lưu ý: Nếu dùng Gmail, bạn cần bật 2FA và tạo App Password mới rồi nhập khi
Get-Credential
yêu cầu.
✅ Tùy chọn lọc theo IP / tài khoản
Nếu muốn lọc theo IP cụ thể hoặc tài khoản, bạn có thể thêm sau phần foreach ($event in $failedLogins)
:
# Ví dụ: chỉ log nếu user chứa "admin"
if ($event.Message -like "*admin*") {
# Thêm vào logContent
}
⏰ Gợi ý thiết lập lịch chạy
-
Dùng
Task Scheduler
chạy mỗi 30 phút. -
“Run with highest privileges”
-
Program:
powershell.exe
-
Arguments:
-ExecutionPolicy Bypass -File "C:\Scripts\LoginFailureAlert_SendWithAttachment.ps1"
👉 Nếu bạn muốn tôi hỗ trợ tạo Task Scheduler luôn hoặc nâng cấp script gửi Telegram alert, Slack webhook, hoặc lưu log vào server mạng, tôi có thể tiếp tục mở rộng theo nhu cầu.
Bạn có muốn phiên bản tích hợp Telegram hoặc Microsoft Teams cảnh báo?
Không có nhận xét nào:
Đăng nhận xét