Skip to content

Artifact Analysis: Ivanti Specific Logs

Log locations differ significantly depending on the specific Ivanti product architecture. Assuming analysts are performing offline analysis on a mounted forensic extraction (e.g., mounted at /mnt/analysis/), these are the critical targets.

The primary application logs for ICS are located within the writable data partition, specifically in /data/var/dlogs/.

Log FileCritical Forensic Value
event.logThe main system journal for the application. Contains service startups, internal errors, and broad system actions.
user_access.logCRITICAL. Tracks user VPN connections. Details who logged in, when, from which IP, and the targeted authentication “Realm”.
admin_access.logCRITICAL. Tracks authentications to the web administration console (/admin). Analysts use this to determine if an attacker successfully logged in using stolen administrative credentials.
web_access.logThe HTTP request log (similar to Apache/Nginx access logs). This is the primary hunting ground for web exploitation (e.g., malicious URIs) and interactions with dropped webshells.

EPMM architecture is closer to a standard Linux deployment (often utilizing Apache/Tomcat).

  • Web Logs: /var/log/httpd/ or /var/log/apache2/ (access_log, ssl_access_log, error_log).
  • Application Logs: /var/log/portal/ (Logs specific to the mobile management portal).

ICS logs are not always easily readable plain text. They can feature strange delimiters, proprietary binary headers, or be compressed during the export process.

The Tool: Ivanti-Connect-Secure-Logs-Parser (Hexastrike) To effectively analyze these files, DFIR teams rely on community parsers to clean the raw data.

  • Function: It ingests raw Ivanti log files and converts them into structured CSV or JSON formats.
  • Utility: This allows analysts to ingest the logs into spreadsheet software or a SIEM (ELK, Splunk) for rapid timeline generation and IP filtering.
parse_ivanti_logs.sh
# Example usage of the Hexastrike parser on a mounted ICS extraction
python3 ivanti_parser.py -f /mnt/analysis/data/var/dlogs/user_access.log -o /tmp/parsed_user_access.csv

Analysts should search for the following specific indicators within the parsed log files.

Look for GET or POST requests targeting files that should not exist or are known indicators of specific CVEs.

  • Webshells: Look for requests targeting .jsp, .php, .sh, or .pl (Perl) files hiding in image or script directories.
  • CVE-2023-46805 (Auth Bypass): Hunt for requests targeting /api/v1/totp/user-backup-code/../../system/maintenance/archiving/cloud-server-test-connection.
  • General Suspicion: Any HTTP request returning a 200 (OK) status code on a highly unusual path or featuring Directory Traversal sequences (../ or %2E%2E%2F).

B. Rogue Administrators (admin_access.log)

Section titled “B. Rogue Administrators (admin_access.log)”
  • The Unknown Admin: A successful login to the admin panel from an IP address that does not belong to legitimate IT staff (e.g., commercial VPNs, Tor exit nodes, or foreign countries).
  • The Phantom Account: Logs indicating the creation of a new local administrator account immediately following a suspicious web request confirm a total system compromise.
  • Credential Stuffing: Thousands of failed login attempts for various usernames originating from a single IP address.
  • Session Hijacking: A single VPN session that suddenly changes its source IP mid-session, or a user connecting simultaneously from two geographically distant countries (“Impossible Travel”).

Even though the appliance runs proprietary software, the underlying OS is Linux. Once an attacker exploits the web layer, they drop into a standard Linux shell environment.

Authentication Logs (/var/log/secure)

Attackers often enable or manipulate SSH to establish a backdoor. Look for successful SSH logins (Accepted password or Accepted publickey) for root or admin. On an Ivanti appliance, SSH is rarely exposed to the internet, making external SSH connections a critical alert. (See Linux Auth Logs Analysis).

Cron Logs (/var/log/cron)

Did the attacker create a scheduled task for persistence? Review cron logs to identify execution of unknown scripts at regular intervals. (See Linux Legacy Persistence).

hunt_ivanti_directory_traversal.spl
# Hunt for directory traversal and webshell access in parsed web_access.log
index=ivanti_logs sourcetype=ivanti:web_access
| search uri_path="*../*" OR uri_path="*..%2F*" OR uri_path="*.jsp" OR uri_path="*.pl"
| table _time, src_ip, http_method, uri_path, status, bytes
| sort - _time