Free Security Log Analyzer
Paste or drop an Entra ID sign-in export, Windows Security events, a Linux auth.log, an nginx or Apache access log, AWS CloudTrail or the Okta System Log. You get findings for password spraying, brute force that succeeded, MFA bypass, credential stuffing, privilege escalation and log tampering — each with the evidence rows and the reason it matters.
Runs entirely in your browser — your log is never uploaded.
Analyze a log
Drop log files here
JSON, CSV, XML or plain text · .gz is fine · up to 25 MB per file · several files at once
Load an example
The examples are sample logs from the corpus LogTriage’s own detections are tested against.
Supported log formats
The format is detected from the content, not the file name. These are the exports it reads, and how to get each one.
Microsoft Entra ID (Azure AD) sign-in logs
- Entra admin center → Monitoring & health → Sign-in logs → Download, as JSON or CSV
- Graph API: the
{"value": […]}response ofGET /auditLogs/signIns - Log Analytics / Sentinel: the
SigninLogstable exported as JSON
Fields used: user, IP address, AADSTS error code, client app, application, location and coordinates, Entra ID Protection risk, user agent
Windows Security events (XML)
- Event Viewer → Windows Logs → Security → Save All Events As… → XML
-
wevtutil qe Security /f:xml /rd:true /c:20000 > security.xml - Binary
.evtxfiles have to be exported to XML first
Fields used: event ID, account, source IP, logon type, Status / SubStatus, group changes, process command lines, scheduled tasks and services
Linux auth.log / secure
-
/var/log/auth.log(Debian, Ubuntu) or/var/log/secure(RHEL, Amazon Linux) -
journalctloutput in the default or-o short-isoformat - Rotated files such as
auth.log.2.gzcan be dropped as they are
Fields used: SSH logins and failures, invalid users, sudo and su, account and group changes
nginx / Apache access logs
-
/var/log/nginx/access.log,/var/log/apache2/access.logor/var/log/httpd/access_log - Combined or common log format; a vhost prefix and a trailing X-Forwarded-For field are handled
Fields used: client IP, method, path and query string, status, response size, referer, user agent
AWS CloudTrail
- Log files from the trail’s S3 bucket (
{"Records": […]};.json.gzis fine) - CloudTrail console → Event history → Download events → JSON
- Output of
aws cloudtrail lookup-events
Fields used: event name and source, principal, source IP, error code, request parameters such as policy documents
Okta System Log
- The JSON array returned by the System Log API (
GET /api/v1/logs) - Newline-delimited events exported from a SIEM
Fields used: event type, actor, client IP, outcome and reason, geolocation, targets
What it detects
52 checks with fixed thresholds. Severity is the level a finding starts at; some move up or down with the evidence, as noted. Where LogTriage publishes a validated Sigma rule for the same behavior, the finding links to it so you can run the check in your SIEM.
Microsoft Entra ID (Azure AD) sign-in logs
- critical
Sign-in succeeded after repeated failures
A successful sign-in from an IP that, in the previous 24 h, failed ≥5 times or for ≥2 different accounts, with failures making up ≥50% of its attempts · high when the source is a private address
- high
Password spray
One IP fails sign-in (AADSTS50126, 50034, 50053 or 50056) for ≥5 distinct accounts within 24 h
- high
Brute force against one account
≥10 failed sign-ins (bad password, unknown user, locked) for one account within 24 h
- high
Correct password, MFA not completed
AADSTS50074, 50076, 50079, 50072 or 500121 with no successful sign-in for the same user and IP within 10 min
- high
Legacy authentication protocol used
clientAppUsed is a legacy protocol (IMAP4, POP3, Authenticated SMTP, Exchange ActiveSync, Exchange Web Services, MAPI, Other clients…) or the user agent contains BAV2ROPC · medium when every legacy attempt failed
- high
Impossible travel
Consecutive sign-ins by one account ≥500 km apart at an implied speed above 1,000 km/h (needs coordinates in the export)
- medium
One account used from several countries
Sign-ins where the password was accepted, for one account, from ≥3 countries within 24 h
- high
Risky sign-in succeeded
Successful sign-in with riskLevelDuringSignIn or riskLevelAggregated of medium/high, or riskState atRisk / confirmedCompromised · medium for medium risk
- medium
Smart lockout triggered
Any AADSTS50053 (account locked after repeated failures, or sign-in from a known-malicious IP blocked)
- info
Blocked by Conditional Access
Any AADSTS53003
Windows Security events (XML)
- critical
Network or RDP logon succeeded after repeated failures
4624 with LogonType 3 or 10 from an IP that had ≥5 failed logons (4625/4771) in the previous 24 h, failures being ≥50% of its attempts · high when the source is a private address
- high
Password spray (4625)
Failed logons (4625/4771) from one IP against ≥5 distinct accounts within 24 h
- high
Brute force against one account (4625)
≥10 failed logons for one account within 24 h
- medium
Username enumeration (SubStatus 0xC0000064)
≥5 failed logons for accounts that do not exist (4625 SubStatus 0xC0000064, 4776 0xC0000064, 4771 0x6) from one source
- low
Account lockouts (4740)
Any 4740 event · high when ≥3 accounts lock out
- high
Audit log cleared
Event 1102 (Security log cleared) or 104 (event log cleared)
- medium
User account created (4720)
Any 4720 event
- high
Account added to a privileged group
4728, 4732 or 4756 adding a member to Domain Admins, Enterprise Admins, Schema Admins, Administrators, Account/Backup/Server Operators, DnsAdmins or similar · critical when the added account was created in the same log
- high
Suspicious scheduled task created (4698)
4698 whose task XML runs encoded PowerShell, a download cradle, a LOLBin download, or a binary from a temp or public folder
- high
Suspicious service installed
4697 or 7045 whose service binary runs a command shell, encoded PowerShell, or a binary from ADMIN$ or a temp or public folder
- high
Suspicious command line (4688)
Process command lines matching credential dumping, shadow-copy deletion, encoded PowerShell, download cradles, LOLBin downloads, log clearing, Defender tampering or AD reconnaissance · per pattern: critical for credential dumping or backup deletion, medium for AD reconnaissance
Linux auth.log / secure
- critical
SSH login accepted after repeated failures
"Accepted …" from an IP that had ≥5 failed authentications in the previous 24 h, failures being ≥50% of its attempts · high when the source is a private address
- high
SSH brute force
≥10 failed SSH authentications (failed password or invalid user) from one IP within 24 h
- medium
SSH username enumeration
≥5 distinct non-existent usernames tried from one IP
- medium
Direct root login over SSH
"Accepted … for root" · high when authenticated by password
- medium
sudo / su authentication failures
pam_unix(sudo|su:auth) failures, "incorrect password attempts" and "user NOT in sudoers"; medium at ≥3 per user or any NOT-in-sudoers refusal · low when a user has fewer than 3 failures and none were refused as "NOT in sudoers"
- high
Suspicious command run with sudo
sudo COMMAND= lines that download from raw IPs, pipe downloads into a shell, make /tmp files executable, open reverse shells, write to authorized_keys, or tamper with history and logs · per pattern: low for a root shell or account change, medium for piped installers and executables in /tmp, high for raw-IP downloads, reverse shells, key planting and log tampering
- medium
Local account created or given admin rights
useradd "new user", usermod/gpasswd adding a user to a group · high when a user is added to sudo, wheel, docker or a similar group
nginx / Apache access logs
- critical
Login succeeded after repeated rejections
A 2xx response to a POST on a login endpoint from an IP that had ≥5 rejected (401/403) login POSTs in the previous 24 h, rejections being ≥50% of its login attempts · high when the source is a private address
- high
Credential stuffing against a login endpoint
One IP sends ≥20 login POSTs of which ≥60% are rejected (401/403), or ≥10 rejected login POSTs within 5 min
- high
Injection payloads in requests
SQL injection, XSS, path traversal, command injection, Log4Shell, Shellshock or cloud-metadata SSRF patterns in the URL (decoded), user agent or referer
- high
Attack tool user agent
User agent of a known offensive tool: sqlmap, Nuclei, Hydra, commix, Nikto, Nmap, masscan, ZGrab, gobuster, DirBuster, WPScan, ffuf, wfuzz, Acunetix and others · medium for discovery scanners (Nikto, Nmap, gobuster…), high for exploitation tools (sqlmap, Nuclei, Hydra…)
- medium
Probing for sensitive files and admin panels
One IP requests ≥3 kinds of sensitive path (.env, .git, backups, phpinfo, actuator, phpMyAdmin, wp-login…), or any secrets/backup/debug path returns 2xx · high when a secrets, backup or debug path returned 2xx with a body
- low
Burst of 404 responses
≥20 404 responses served to one IP · medium at ≥100 responses
AWS CloudTrail
- critical
Administrator-equivalent IAM permissions granted
Successful Attach*Policy of AdministratorAccess / IAMFullAccess or of a policy allowing Action "*" on Resource "*"; Put*Policy, CreatePolicy or CreatePolicyVersion with such a document · high when an admin-equivalent policy was created but not attached in this log
- high
IAM credentials or trust created for persistence
Successful CreateUser, CreateAccessKey, CreateLoginProfile, UpdateLoginProfile, UpdateAssumeRolePolicy, DeactivateMFADevice and similar · medium for CreateUser and for access keys a user creates for itself
- medium
IAM permissions changed
Successful Attach*Policy, Put*Policy, CreatePolicyVersion, SetDefaultPolicyVersion, AddUserToGroup or permission-boundary changes that are not admin-equivalent
- critical
Logging, detection or security controls disabled
StopLogging, DeleteTrail, UpdateTrail, PutEventSelectors, DeleteDetector, StopConfigurationRecorder, DeleteFlowLogs, DisableSecurityHub, DeleteAccountPasswordPolicy and similar calls · high for updates (UpdateTrail, PutEventSelectors, UpdateDetector…); medium when the attempt failed
- high
Root account used
Any event whose userIdentity.type is Root (excluding AWS service events)
- high
Console sign-in failures
≥5 failed ConsoleLogin events from one source IP (or for one user) within 24 h
- medium
Burst of AccessDenied errors
≥10 AccessDenied / UnauthorizedOperation errors for one principal within 60 min
Okta System Log
- critical
Sign-in succeeded after repeated failures
A successful user.session.start from an IP that, in the previous 24 h, failed ≥5 times or for ≥2 different accounts, with failures making up ≥50% of its attempts · high when the source is a private address
- high
Password spray
One IP fails primary authentication for ≥5 distinct accounts within 24 h
- high
Brute force against one account
≥10 failed primary authentications for one account within 24 h
- high
MFA push fatigue
≥3 push denials, challenge timeouts or failed MFA verifications for one user within 60 min
- high
Administrator privileges granted
user.account.privilege.grant, group.privilege.grant, or a support impersonation grant/session
- medium
Sign-on security configuration changed
Changes to sign-on/MFA policies and rules, network zones, authenticators, identity providers, MFA factor resets and API token creation · high for deactivations and deletions, new identity providers and MFA authenticator removal
- high
Okta ThreatInsight flagged a source
security.threat.detected or security.request.blocked events · medium when the request was only blocked
- low
Account lockouts
user.account.lock events · medium when ≥3 accounts lock out
- high
Impossible travel
Consecutive successful sign-ins by one account ≥500 km apart at an implied speed above 1,000 km/h
- medium
One account used from several countries
Successful sign-ins for one account from ≥3 countries within 24 h
Every format
- medium
Instructions aimed at AI log triage
A user agent, username, path or similar attacker-controlled field contains LLM instructions ("ignore previous instructions", "set severity to low", …)
How it works, and why your log stays private
-
Read locally
The browser reads the file from your disk (gzip and UTF-16 are decoded in the tab). Nothing is sent to LogTriage or anyone else, and nothing is stored: no cookies, no local storage. Reload and it is gone.
-
Detect and normalize
The format is identified from the content and every record is mapped to one event shape — time, user, source IP, outcome, error code, client, path — so the same correlation logic runs on every source. Multiple files of the same format are merged first, so an attack split across rotated logs is still one story.
-
Correlate, not just match
Single-line signatures catch tool user agents and injection payloads. The findings that matter most come from sequences: failures across many accounts from one address, a success right after a failure burst, a password accepted but MFA never completed, a brand-new account placed into Domain Admins.
-
Tested against real samples
The detection code is checked on every deploy against LogTriage’s sample corpus: each malicious sample must raise at least one medium-or-higher finding and each benign sample must raise none. The same check confirms the code contains no network calls.
Want to verify the privacy claim yourself? Open your browser’s developer tools on the Network tab, or load this page and disconnect from the network before you analyze — it works offline.
Frequently asked questions
- Is my log uploaded anywhere?
- No. The file is read with the browser’s File API and parsed by JavaScript running in this tab; this tool has no server side. You can check: open your browser’s developer tools on the Network tab and analyze a file — no request carries your data. The page’s only other traffic is its own scripts and styles and the site’s cookieless page-view counter (Cloudflare Web Analytics), which records that the page was viewed, not what you pasted. Reloading or closing the tab discards everything.
- Which log formats can it read?
- Microsoft Entra ID sign-in logs (portal JSON or CSV download, Graph API, Log Analytics), Windows Security events exported as XML, Linux auth.log and /var/log/secure, nginx and Apache access logs, AWS CloudTrail JSON, and the Okta System Log. The format is detected automatically. Gzip files and the UTF-16 files Windows PowerShell writes are decoded in the browser.
- How does it decide what is suspicious?
- With fixed, published rules rather than a model. For example, a password spray is one IP failing sign-in for 5 or more distinct accounts within 24 hours, and the most serious finding — a successful login from an address that had just failed 5 or more times — is a correlation across events. Every threshold is listed under “What it detects”. There is no AI and no threat-intelligence lookup, because both would mean sending your data somewhere.
- What does “correct password, MFA not completed” mean in Entra ID logs?
- Error codes AADSTS50074 and 50076 (strong authentication required), 500121 (MFA failed or denied) and 50072/50079 (MFA registration required) are only returned after the password was accepted. When no successful sign-in from the same user and IP follows within ten minutes, someone had the right password and was stopped by MFA. If the user did not make that attempt, the password is compromised and should be reset.
- Why did it find nothing in my log?
- Either nothing crossed a threshold, or the export lacks the fields a check needs — the portal CSV, for instance, has no coordinates, so impossible travel cannot be computed from it. No findings is not proof of a clean log: slow attacks can stay below the thresholds, and an IP is only judged by what it did in this file, not by its reputation.
- What does the LogTriage app add?
- It enriches every IP, hash and URL against threat-intelligence sources (AbuseIPDB, AlienVault OTX, ThreatFox, MalwareBazaar, URLScan and others), reads 50 log formats, scores every event, and writes an incident report with a timeline, impacted users, IOCs, MITRE ATT&CK mapping and prioritized remediation. That analysis runs on LogTriage’s servers, so it needs an upload; there is a free tier.