Free No signup 52 detections · 6 log formats

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 of GET /auditLogs/signIns
  • Log Analytics / Sentinel: the SigninLogs table exported as JSON

Fields used: user, IP address, AADSTS error code, client app, application, location and coordinates, Entra ID Protection risk, user agent

How to Analyze Azure AD Sign-In Logs → Format reference →

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 .evtx files 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

How to Analyze Windows Event Logs →

Linux auth.log / secure

  • /var/log/auth.log (Debian, Ubuntu) or /var/log/secure (RHEL, Amazon Linux)
  • journalctl output in the default or -o short-iso format
  • Rotated files such as auth.log.2.gz can 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.log or /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

How to Analyze nginx Access Logs for Security Threats →

AWS CloudTrail

  • Log files from the trail’s S3 bucket ({"Records": […]}; .json.gz is 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

How to Analyze AWS CloudTrail Logs →

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

Format reference →

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Related