Skip to content

Triage network

The Network tab of Triage summarizes the traffic of one run in four tables: Endpoints, Domains, URLs and TLS. Each tab carries a whole-run count. Every row has an IOC column that says whether its indicator matches an offline dataset.

Triage of a recorded run of /tmp/triage-sample, on the Network tab. Under the run selector, Network route reads Internet (VM NAT, QEMU user networking), and the tab repeats Route: Internet (VM NAT, QEMU user networking). The sub-tabs are Endpoints 2, Domains 1, URLs 1 and TLS 0, with Endpoints selected. Below are a filter box with the example network.country == US, the line 1–2 of 2 matched; page size 2000, Previous, Next, Open Packets and Open IOC. The table has the columns Endpoint, IOC, Proto, Frames, Bytes, Country, Organization and First seen, with two rows: 10.0.2.2:53 udp, 2 frames, 158 bytes, and 10.0.2.2:8080 tcp, 10 frames, 900 bytes, both IOC Not checked, country - and organization local network.
Triage › Network › Endpoints of a recorded run on a NAT VM. Antinomie 0.8.0, a recorded run.

These four tabs replaced the 0.7.0 tabs (IPs, Hosts, HTTP, DNS and Sessions) in 0.7.1. The old filter field names (http.method, dns.name, session.alpn, network.country and the others) work in the new tabs, so a saved filter keeps working.

Triage reads the pcap that belongs to the selected run. A capture owns a run when the run’s record names it, which is the case for Capture network from start until tree exits in Run program. Such a dedicated capture takes priority over a manual one from the same boot. A manual capture that was running during the run is used only inside the run’s time window. When the run had no capture, the tab says Network capture was off for this run.; while the capture is read it says Indexing this run's capture….

A pcap records all traffic of the VM, not one process’s, so no row names a process. Matching by time does not prove that this run produced the packets. Network triage aggregates every capture segment the run owns before filtering, sorting and paging. Times use QEMU’s capture clock, shown in your timezone, and can differ from the host’s clock.

The installed TShark parses the capture in a sandbox. The tables are built from the fields it prints, without keys: encrypted content stays encrypted.

Network route, above the Triage tabs, names the route the run used, and the Network tab repeats it as its first line: for example Route: Tor via 127.0.0.1:9050, Route: Internet (VM NAT, QEMU user networking) for a run on a NAT VM, or Route: Not recorded for a run saved before routes were recorded. Its tooltip explains the route and what the gateway counted. On Tor, VPN and SOCKS5 routes, the guest received stand-in addresses from 198.18.0.0/16 for every name, so read those runs by name in Domains and TLS rather than by address in Endpoints. See Network routes.

Tab Columns Built from
Endpoints Endpoint, IOC, Proto, Frames, Bytes, Country, Organization, First seen, Last seen One row per remote ip:port, TCP or UDP
Domains Domain, IOC, Seen as, Resolved / connected IPs, Queries, First seen, Last seen, Rcode DNS questions, TLS and QUIC server names and HTTP Host headers, merged by name
URLs Frame, Time, Endpoint, IOC, Method, Host, URI, Version, Response Cleartext HTTP/1 requests with the correlated response, and cleartext HTTP/2 requests
TLS Frame, Server name, IOC, Endpoint, Version, ALPN, JA3, JA4, JA3S, Cert SHA-1, Sessions TLS and QUIC sessions grouped by server name, server and JA3
Triage Network tab with the Domains sub-tab selected and a filter box showing the example dns.name contains example. One row: Domain example.com, IOC Not checked, Seen as DNS lookup, Resolved / connected IPs 93.184.216.34, Queries 3, with first and last seen times.
Domains: one row per name, however the run came across it. Antinomie 0.8.0, synthetic data.
  • Seen as says where a domain’s name came from, such as DNS lookup, HTTP, TLS SNI or QUIC SNI. Rcode says how DNS answered it.
  • URLs lists HTTP/2 requests without their responses. The response frame is in Details.
  • TLS shows what an encrypted session says about itself in its handshake: the server name, the version the server hello named, the ALPN protocols, the JA3 and JA4 client fingerprints and the JA3S server fingerprint when the installed TShark computes them, and the SHA-1 of the server’s certificate (not visible in TLS 1.3). Sessions counts the sessions in the group.
  • The content of HTTPS, HTTP/3 and encrypted DNS stays encrypted.
Triage Network tab with the URLs sub-tab selected and one row: frame 1, endpoint 10.0.2.15:40000 → 93.184.216.34:80, IOC Not checked, method GET, host example.com. Details on the right show the HTTP request with frame, time, endpoint, IOC, method, host, URI /, version HTTP/1.1 and response, an Observed fields section and an Open original packet button.
URLs, with the selected request in Details. Antinomie 0.8.0, synthetic data.

Each row’s indicator (the endpoint, the domain, the URL or the TLS server name and fingerprints) is matched offline against the abuse.ch datasets installed in Tools › Detection rules › IOC. The verdict is Matched, Known FP, No match or Not checked; private, loopback and link-local addresses and local names are Not checked. No match is not a clean result: the datasets list only what abuse.ch has seen. Open IOC opens the run’s IOC section, which holds the process (when exactly one process made a matching call), the sources and the evidence for each indicator.

Triage IOC tab of a recorded run, headed Indicators of compromise. Datasets reads none loaded and Auth-Key missing, with Online lookups off, Datasets… and Download buttons, and a warning No datasets loaded: indicators are not checked. Use Datasets… to download. Summary cards count Endpoints 2, Domains 1, URLs 1, TLS 0 and Files 11, all not checked. Matched indicators reads 0 of 15. Where the indicators came from lists pcap (14 frames, read by TShark), syscall (recorded calls), static (strings and hashes of the sample) and disk (no saved disk dump of this run).
The IOC section that Open IOC leads to. With no datasets loaded, every indicator reads Not checked. Antinomie 0.8.0, a recorded run.

Local destination addresses show - and local network and are never looked up. For public addresses, Tools › Settings › Network lookup › Address lookup chooses the source:

The Settings window on the Network lookup page, with Address lookup set to TShark GeoIP only; the other options are dig and whois only, and TShark GeoIP, then dig and whois when unavailable.
Settings › Network lookup. Antinomie 0.8.0, synthetic data.
  • TShark GeoIP only (the default) uses your locally configured GeoIP data. Missing data stays Unavailable.
  • dig and whois only runs dig and whois on this machine.
  • TShark GeoIP, then dig and whois when unavailable tries GeoIP first.

Antinomie contacts no lookup service of its own. dig and whois query the servers your system is configured for, for at most 24 public destinations per run; a warning says how many more were not queried. An unavailable lookup names the affected address and says the country or organization is unknown.

New in 0.8.0

On a Routed VM with a Cloud VPS profile, the gateway answers the provider’s metadata address itself. Requests to it, the canary credentials it handed out and any use of a canary in what the guest sent are findings in Process › Suspicious activity (credential.cloud_metadata, credential.cloud_credentials, credential.canary_used, all HIGH, ATT&CK T1552.005). The address a canary was sent to is also listed as an endpoint indicator in the IOC section.

Click a row for its details. Double-click it, or press Open original packet in Details, to open the run’s own pcap in Network with the original frame selected, even if a packet filter had hidden it. Open Packets, under the filter box, shows the run’s capture in the Network panel; it is disabled when the run has no packet capture.

The filter box takes the fields of the tab on screen, for example network.country == US on Endpoints, dns.name contains example on Domains, http.method == GET on URLs and tls.sni contains example on TLS. Every field is in Triage table filters. The refresh status at the right of the tab bar works as in Triage processes.