That background process might be leaking your files to a server in a country you have never visited. Right now, your Mac has dozens — possibly hundreds — of active network connections. Some of them are exactly what you expect: your browser loading web pages, iCloud syncing your documents, Slack receiving messages. But others are less obvious. That free PDF editor you downloaded last month? It has been establishing outbound connections to an IP address registered in a jurisdiction with no data protection laws. The browser extension you installed for convenience? It has been quietly uploading your browsing history to an analytics server every fifteen minutes. The cracked application a friend recommended? It has been phoning home to a command-and-control server, waiting for instructions.
Most Mac users assume that macOS security features — Gatekeeper, XProtect, the App Sandbox — protect them from these threats. And those features do provide a baseline of protection. But they are designed to prevent known malware from executing, not to monitor what legitimate-looking applications do with your network connection after they are running. A signed, notarized application can still exfiltrate your data. A sandboxed application that has been granted network access can still send your documents to an unknown server. The question is not whether your Mac's defenses will stop the malware from running. The question is whether you will notice when a running application starts behaving in ways it should not. This is the problem that data exfiltration detection solves, and it is exactly what Paranoid's Traffic Inspector was built to address.
The Silent Threat: Data Leaving Your Mac Without Permission
Data exfiltration is the unauthorized transfer of data from a computer to an external destination. Unlike ransomware, which announces itself loudly, or adware, which visibly disrupts your experience, data exfiltration is designed to be invisible. The attacker's success depends entirely on you not noticing. The data leaves your Mac through ordinary-looking network connections — HTTPS to a cloud storage endpoint, DNS queries that encode data in subdomain names, periodic small uploads that blend into normal traffic patterns. There is no popup, no warning, no visible indication that anything is wrong.
The scale of this threat on macOS has grown dramatically. In 2025, security researchers documented multiple cases of legitimate Mac App Store applications that were collecting and transmitting user data far beyond what their stated functionality required. Screen recording applications were uploading screenshots to remote servers. Keyboard customization tools were logging keystrokes. System utilities were inventorying installed applications and sending the lists to analytics endpoints. These were not unsigned binaries downloaded from questionable websites — they were notarized, reviewed applications distributed through Apple's own storefront. If App Store review cannot catch every case of unauthorized data transmission, the responsibility falls to you to monitor what your applications are actually doing with your network connection.
Why traditional macOS security is not enough
macOS provides several layers of built-in security, but none of them specifically addresses outbound traffic monitoring:
- Gatekeeper verifies that applications are signed by identified developers and notarized by Apple. It does not monitor what those applications do after launch.
- XProtect scans for known malware signatures. It does not detect novel exfiltration techniques or legitimate applications that overshare data.
- App Sandbox restricts file system and resource access, but applications that request (and are granted) network entitlements can communicate freely with any server.
- macOS Firewall (Application Firewall) controls incoming connections. It does not filter, monitor, or alert on outbound connections — the exact direction in which exfiltration occurs.
- Privacy & Security settings (TCC) control access to cameras, microphones, contacts, and files, but once access is granted, there is no monitoring of what the application does with the data it reads.
The gap is clear: macOS security focuses on what applications can access, not on what they do with their network connection after accessing it. A network traffic monitor for Mac that watches outbound connections, identifies the responsible process, and alerts on anomalous behavior is the missing layer.
What Is Data Exfiltration and Why Should Mac Users Care?
Data exfiltration encompasses any technique used to move data from a target system to an attacker-controlled destination. The techniques range from obvious to extraordinarily subtle:
Direct data transfer
The simplest method: a process opens an HTTPS connection to a remote server and uploads files, database contents, credentials, or other sensitive data. The connection looks like ordinary web traffic because it uses standard ports (443) and standard protocols (TLS). Without inspecting which process is making the connection and where the data is going, this is indistinguishable from your browser loading a web page. A suspicious connections scanner that maps every outbound connection to its owning process is the only way to catch this in real time.
C2 beaconing
Command-and-control (C2) beaconing is a pattern where malware periodically connects to an attacker's server to check for new instructions, report status, and upload collected data. The connections are short, regular, and small — designed to blend into the noise of normal network activity. The beaconing interval might be every 5 minutes, every hour, or randomized to evade simple periodicity detection. The data transferred in each beacon might be just a few kilobytes — a stolen password, a screenshot, a list of files. Over days and weeks, these small exfiltrations accumulate into a comprehensive breach.
DNS tunneling
DNS tunneling encodes data in DNS queries — the domain name lookups that your computer makes thousands of times per day. Instead of resolving www.example.com, the malware resolves aGVsbG8gd29ybGQ.data.attacker-domain.com, where the subdomain is base64-encoded stolen data. The attacker's DNS server extracts the encoded data from the query. Because DNS is allowed through virtually every firewall and rarely monitored, this technique bypasses most network security controls. Detecting it requires analyzing DNS query patterns for unusual characteristics: excessive query length, high query volume to a single domain, and encoded-looking subdomain structures.
Slow exfiltration (low-and-slow)
Sophisticated attackers deliberately limit their data transfer rate to stay below detection thresholds. Instead of uploading 500 MB in one burst (which would be trivially detectable), they transfer 50 KB every 10 minutes over the course of weeks. This "low-and-slow" approach is specifically designed to evade simple bandwidth-based alerts. Detecting it requires behavioral baseline analysis — learning what each process normally transfers and alerting when even small deviations accumulate over time.
The Mac-specific threat landscape
Mac users face a particular risk profile. The perception that macOS is inherently more secure than other operating systems has created a culture of complacency. Many Mac users install fewer security tools, pay less attention to application permissions, and assume that Apple's ecosystem protections are sufficient. Attackers have noticed. The volume of macOS-targeting malware has increased year over year, with information stealers — malware specifically designed to collect and exfiltrate credentials, browser data, cryptocurrency wallets, and personal files — representing the fastest-growing category. If you use your Mac for work, banking, cryptocurrency, or anything involving sensitive data, monitoring your outbound network traffic is not optional. It is essential.
The Manual Way: Using netstat and lsof in Terminal
Before we examine how Paranoid automates this process, it is worth understanding what manual outbound traffic scanning looks like on macOS. The two essential tools are netstat and lsof, both included with every macOS installation.
Enumerating connections with netstat
Open Terminal and run:
netstat -anp tcp
netstat -anp udp
This lists all active TCP and UDP connections with their state, local address and port, remote address and port, and the receive/send queue sizes. A typical Mac will show 50 to 200+ active connections. The output looks like this:
Proto Local Address Foreign Address State
tcp4 192.168.1.42.51234 142.250.180.46.443 ESTABLISHED
tcp4 192.168.1.42.51235 17.57.144.36.5223 ESTABLISHED
tcp4 192.168.1.42.51240 52.96.166.130.443 ESTABLISHED
tcp4 192.168.1.42.51242 185.199.108.154.443 ESTABLISHED
tcp4 192.168.1.42.51250 104.18.12.33.443 ESTABLISHED
The problem is immediately apparent: you see IP addresses and port numbers, but you have no idea which application is responsible for each connection or what data is being sent. The IP 142.250.180.46 is Google, and 17.57.144.36 is Apple — both expected. But what about 185.199.108.154? Is that GitHub, or is it something else? And 104.18.12.33? That is a Cloudflare IP, but which of your applications is connecting to it, and why?
Identifying processes with lsof
To map connections to processes, use lsof:
lsof -i -n -P
This shows every process with an open network socket, including the process name, PID, user, file descriptor, protocol, and the local and remote addresses. Now you can see that the connection to 185.199.108.154 is owned by git (fetching from GitHub), and the Cloudflare connection belongs to Discord. Both legitimate. But the connection from SomeApp to 91.215.85.17:443? That IP resolves to a hosting provider in Eastern Europe, and you have no idea why a note-taking application needs to connect there.
Why manual monitoring is unsustainable
Running these commands manually works for a one-time check, but it is not a viable monitoring strategy. Connections appear and disappear in seconds. A process could exfiltrate data in the 30 seconds between your manual checks, and you would never see it. You would need to run these commands continuously, parse the output, track changes over time, resolve IP addresses to locations, cross-reference process names with expected behavior, and somehow notice the one anomalous connection among hundreds of legitimate ones. This is exactly what Paranoid's Traffic Inspector automates — continuously, in real time, with pattern matching, behavioral baselines, and adaptive alerting.
Traffic Inspector monitors every outbound connection in real time, identifies the responsible process, and alerts you the moment something suspicious happens. No Terminal commands required.
Traffic Inspector: Automated Outbound Traffic Analysis
Paranoid's Traffic Inspector is a host-based intrusion detection system (IDS) built entirely with native macOS frameworks. It continuously monitors all TCP and UDP connections on your Mac, identifies the process behind each connection, enriches the data with geolocation and reverse DNS information, and runs every snapshot through a multi-layered detection pipeline that catches data exfiltration, C2 beaconing, port scanning, brute-force attacks, and attack pattern correlation. It runs as a Swift actor with async/await concurrency, ensuring thread safety without locks and zero impact on UI responsiveness.
The four-service architecture
Traffic Inspector is composed of four specialized services that work together in a continuous pipeline:
ConnectionMonitorService is the data collection layer. It is a Swift actor that runs a monitoring loop at a configurable interval (default: 2 seconds). Each cycle executes /usr/sbin/netstat -anp tcp and netstat -anp udp to enumerate all active connections, then enriches them with process information from /usr/sbin/lsof -i -n -P -F pcn. The lsof output is parsed in a structured format (field-delimited, not tabular) for reliable extraction of process name, PID, and connection details. Results are cached for 5 seconds to avoid redundant lsof executions when multiple enrichment cycles overlap. Each connection is further enriched with reverse DNS resolution and GeoIP data (country, threat level) for external IP addresses, with results cached for 5 minutes per IP and batched to a maximum of 5 lookups per cycle to prevent network overhead.
TrafficPatternMatcher is the detection engine. It is a stateless, thread-safe class that runs two categories of analysis on every connection snapshot. First, connection-level pattern detection identifies port scanning (a single external IP connecting to more than N distinct local ports within a time window) and brute-force attacks (a single external IP establishing more than N connections to the same local port). Second, payload-level pattern matching uses pre-compiled regular expressions to detect SQL injection, cross-site scripting (XSS), command injection, and path traversal patterns in captured interaction data. Each pattern category has 9 to 13 distinct regex signatures, all compiled at class initialization for zero per-analysis overhead.
TrafficBaselineService is the behavioral analysis layer. It learns the normal network behavior of every process on your Mac during a configurable learning phase (default: 4 hours), recording which remote ports each process connects to, which countries and IP network prefixes it contacts, and how many concurrent connections it typically maintains. After learning completes, it continuously compares live behavior against the baseline and generates anomaly alerts for five categories of deviation: new process making external connections, known process contacting a new country, connection count spike above mean plus two standard deviations, known process connecting to an unusual port, and known process contacting an unusual network prefix. A per-process cooldown of 5 minutes prevents alert flooding.
TrafficAlertService is the alert management and correlation layer. It receives alerts from both the pattern matcher and the baseline service, deduplicates them (same source IP and pattern type within a 2-minute window), persists them to disk as JSON, and performs cross-alert correlation to detect coordinated attack campaigns. When a single IP generates alerts of two or more distinct types within a 10-minute window — for example, a port scan followed by a brute-force attempt — the service generates a critical-severity "attack campaign" alert. It also runs the data exfiltration detection engine, which monitors per-process upload rates and triggers critical alerts when any process exceeds its adaptive threshold.
What you see in the UI
The Traffic Inspector interface is accessible from the "Traffic Inspector" section in Paranoid's sidebar. When active, it displays a real-time connection table showing every active TCP and UDP connection on your Mac with the following columns:
- Process — The name and PID of the application or daemon responsible for the connection.
- Remote Address — The IP address of the remote server, with reverse DNS resolution and a country flag when available.
- Remote Port — The destination port (443 for HTTPS, 22 for SSH, etc.).
- Protocol — TCP or UDP.
- Direction — Inbound or outbound, determined by comparing local and remote port ranges.
- State — TCP connection state (Established, SYN Sent, Close Wait, etc.).
- Transfer Rate — Real-time bandwidth consumption (bytes/sec for both send and receive), calculated by comparing consecutive snapshots.
- Severity — A color-coded indicator: green for normal, yellow for unusual, orange for suspicious, red for critical.
You can filter the connection list by process name, protocol (TCP/UDP), destination country, or direction (inbound/outbound). The alert panel shows all triggered alerts with timestamps, severity levels, and detailed descriptions including the specific detection rule that fired.
How Pattern Matching Catches Suspicious Connections
Traffic Inspector's pattern matching operates at two levels: network behavior patterns that analyze connection metadata (which IPs, which ports, how many connections, how fast), and payload patterns that analyze the actual data being transmitted through honeypot-captured interactions. The network behavior patterns are the primary defense against data exfiltration.
Port scan detection
A port scan is the reconnaissance phase of most network attacks. The attacker (or malware) systematically connects to multiple ports on a target to discover which services are running. Traffic Inspector detects this by monitoring inbound connections and grouping them by source IP. When a single external IP connects to more ports than the adaptive threshold (default: 15, adjusted based on historical observations) within a 2-minute window, a warning alert is generated. The detection specifically filters for inbound connections only, excludes private and link-local addresses, and ignores ephemeral ports (above 49152) to avoid false positives from normal outbound connection responses.
Brute-force detection
A brute-force attack targets a single service port with repeated connection attempts, typically trying different credentials. Traffic Inspector detects this by counting established and SYN-sent connections from each external IP to each local port. When the count exceeds the adaptive threshold (default: 20) within a 2-minute window, a warning alert is generated. Like port scan detection, this only considers inbound connections from non-private IP addresses in established or SYN-sent states, eliminating false positives from normal multiplexed connections.
Attack payload analysis
When Traffic Inspector is used alongside Paranoid's Honeypot Mode, captured attacker interactions are automatically fed through the pattern matcher. The engine uses 42 pre-compiled regular expressions across four attack categories:
- SQL Injection (13 patterns) — Detects UNION SELECT, boolean-based injection, time-based blind injection (SLEEP, WAITFOR DELAY, BENCHMARK), file operations (LOAD_FILE, INTO OUTFILE), and information_schema enumeration.
- Cross-Site Scripting (10 patterns) — Detects script tag injection, javascript: protocol handlers, event handler attributes (onerror, onload, onclick), iframe injection, eval() calls, and DOM manipulation (document.cookie, document.location).
- Command Injection (10 patterns) — Detects shell command chaining via semicolons, pipes, and logical operators followed by known dangerous commands (wget, curl, nc, bash, chmod, rm), backtick execution, and $() subshell execution.
- Path Traversal (9 patterns) — Detects directory traversal sequences (../ and URL-encoded variants), references to sensitive system files (/etc/passwd, /etc/shadow, /proc/self/), and Windows system paths.
Each regex is compiled once at initialization, so the per-analysis cost is just pattern matching — no regex compilation overhead on every check. When a pattern matches, the alert includes 60 characters of surrounding context so you can see exactly what the attacker attempted.
Attack campaign correlation
Individual alerts are informative, but correlated alerts reveal coordinated attacks. Traffic Inspector maintains a 10-minute sliding window of alerts per source IP. When a single IP triggers two or more distinct alert types — for example, a port scan (reconnaissance) followed by a brute-force attempt (exploitation) — the system generates a critical-severity "attack campaign" alert. A 30-minute cooldown per IP prevents repeated campaign alerts for ongoing attacks while ensuring new attack phases are still detected.
Baseline Deviation: Learning What Normal Looks Like
Pattern matching catches known attack signatures. But what about threats that do not match any known pattern? A novel information stealer, a legitimate application that has been compromised in a supply-chain attack, or a process that gradually changes its behavior over weeks — these threats evade signature-based detection. This is where behavioral baseline analysis becomes essential.
The learning phase
When you activate Traffic Inspector's baseline feature, it enters a learning phase (default: 4 hours, configurable). During this phase, the TrafficBaselineService observes every process that makes network connections and records a comprehensive behavioral profile:
- Typical remote ports — Which destination ports does each process normally connect to? Safari connects to 443 and 80. Mail connects to 993 and 587. Spotify connects to 443 and 4070. Any deviation from these patterns is notable.
- Typical countries — Which countries host the servers that each process contacts? Your browser might connect to servers in a dozen countries. Your email client connects to your provider's country. A note-taking app that suddenly starts connecting to an unexpected country is suspicious.
- Typical IP prefixes — Which /24 network prefixes (for IPv4) or /48 prefixes (for IPv6) does each process typically contact? This is more granular than country-level analysis and catches cases where a process connects to a new server in the same country.
- Connection count distribution — How many concurrent connections does each process typically maintain? Up to 200 samples per process are recorded to calculate a reliable mean and standard deviation.
The baseline is persisted to disk as JSON in the application support directory, so it survives application restarts. Learning progress is preserved if you need to close and reopen Paranoid.
The five anomaly detectors
After the learning phase completes (automatically or manually), the baseline transitions to active detection mode. Every connection snapshot is now compared against the learned profiles, and five types of anomalies are detected:
1. New process with external connections. A process that was never observed during learning is now making outbound connections to external IP addresses. This could indicate a newly installed application (benign) or newly activated malware (critical). The alert includes the process name and the number of external connections. You can whitelist known-safe processes to suppress future alerts for them.
2. New country for a known process. A process that normally connects to servers in the US and Ireland is suddenly connecting to an IP geolocated to a country it has never contacted before. This is a common indicator of C2 redirection, where an attacker moves their infrastructure to a different hosting provider. The alert includes the process name and the new country with its flag emoji for quick visual identification.
3. Connection count spike. A process is maintaining significantly more concurrent connections than its historical average. The threshold is calculated as the mean plus the maximum of two standard deviations or 3 (to avoid alerting on minor fluctuations for processes with very stable connection counts). This catches scenarios like an information stealer that activates and begins making many parallel connections to upload collected data.
4. New remote port for a known process. A process is connecting to a port it has never used before. Dropbox suddenly connecting on port 6881 (BitTorrent) or a text editor connecting on port 22 (SSH) would trigger this alert. It detects both compromised applications (where injected code uses different ports than the legitimate application) and applications that receive malicious updates adding new network functionality.
5. New network prefix for a known process. A process is connecting to an IP in a /24 network block it has never contacted before. This is the most granular detection and catches infrastructure changes that country-level analysis might miss — for example, a C2 server that moves from one hosting provider to another within the same country.
Incremental learning
The baseline is not frozen after the learning phase ends. In active detection mode, Traffic Inspector continues to learn incrementally. When a new port, country, or network prefix is consistently observed for a process (5-10 repeat observations depending on the category), it is automatically added to the baseline profile with a debug log entry. This prevents the baseline from becoming stale as your applications legitimately evolve — for example, when a cloud service migrates to new infrastructure or when you start using a new feature in an existing application. The learning is deliberately slow (requiring multiple confirmations) to prevent an attacker from quickly training the baseline to accept malicious behavior.
Adaptive Thresholds and the Exfiltration Detection Engine
Static thresholds are the Achilles' heel of most intrusion detection systems. Set the threshold too low and you drown in false positives. Set it too high and you miss real attacks. Traffic Inspector solves this with adaptive thresholds that automatically calibrate to your specific network environment.
The RateTracker system
Traffic Inspector uses a component called RateTracker to maintain adaptive thresholds for three detection categories: port scanning, brute-force attacks, and data exfiltration. Each RateTracker collects timestamped samples of observed network behavior (the maximum number of distinct ports per IP for port scanning, the maximum connections per IP:port for brute force, and the aggregate upload rate per process for exfiltration). Samples older than 2 hours are automatically pruned to keep the threshold responsive to changing conditions.
When at least 20 samples have been collected, the adaptive threshold is calculated as mean + 2 standard deviations, with a floor of half the default threshold to prevent the adaptive value from dropping too low on very quiet networks. When fewer than 20 samples are available, the system falls back to the default threshold (15 ports for port scanning, 20 connections for brute force, 5 MB/s for exfiltration). The RateTracker state is persisted to disk every 50 observations, so thresholds are preserved across application restarts.
Data exfiltration detection in detail
The data exfiltration detection engine is the most critical component for catching unauthorized data transfers. Here is how it works, step by step:
- Bandwidth calculation. The ConnectionMonitorService compares consecutive connection snapshots to calculate real-time transfer rates. For each connection that appears in both the current and previous snapshot, it computes
(current bytes - previous bytes) / elapsed timefor both receive and transmit directions. This gives you per-connection, per-second bandwidth figures. - Per-process aggregation. The TrafficAlertService aggregates transmit rates (upload) across all external connections for each process. If Chrome has 15 active connections to external servers, their individual upload rates are summed to get Chrome's total outbound bandwidth.
- Adaptive threshold comparison. Each process has its own RateTracker that learns its normal upload behavior. The aggregate upload rate is recorded as a sample. When the rate exceeds the adaptive threshold (mean + 2 sigma, minimum 2.5 MB/s), a critical exfiltration alert is generated.
- Cooldown enforcement. A 5-minute cooldown per process prevents alert storms from sustained high-bandwidth transfers. If Chrome legitimately uploads a large file to Google Drive, you get one alert, not one per monitoring cycle for the duration of the upload.
- Alert with context. The generated alert includes the process name, the observed upload rate in MB/s, and the threshold that was exceeded. This gives you the information you need to decide immediately whether the transfer is legitimate or suspicious.
This multi-layered approach catches both sudden bulk exfiltrations (a process uploading gigabytes in a burst) and processes whose upload behavior gradually increases over time (deviating from their learned baseline). The adaptive threshold means that a process which normally uploads at 100 KB/s will trigger at a much lower absolute rate than a process which normally uploads at 10 MB/s, making the detection sensitive to each process's individual behavior profile.
Real-World Detection Scenarios
Understanding what Traffic Inspector catches in practice helps you interpret the alerts you will see and respond appropriately. Here are the most common detection scenarios for Mac users.
Scenario 1: Information stealer exfiltrating browser data
You receive a critical exfiltration alert: "SomeHelper" upload anomalo: 12.3 MB/s (soglia: 3.1 MB/s). The process name is not one you recognize. Checking the connection list, you see it has established connections to an IP geolocated to a data center in Eastern Europe.
What happened: A macOS information stealer (possibly delivered through a Trojanized application, a malicious DMG, or a social engineering attack) has collected browser cookies, saved passwords, cryptocurrency wallet files, and SSH keys from your home directory and is uploading them to a drop server.
What to do: Open Activity Monitor and force-quit the process immediately. Note the PID from the Traffic Inspector connection list. In Terminal, run lsof -p [PID] before killing it to see which files it had open. Check your browser's saved passwords and sessions — assume they are compromised. Change your most critical passwords (email, banking, cryptocurrency) from a different device. Run a full malware scan. Check ~/Library/LaunchAgents/ for any persistence mechanisms the malware may have installed.
Scenario 2: Legitimate app leaking data to analytics
The baseline deviation engine generates a "new country" alert: a productivity application that normally connects only to US servers is now connecting to an IP geolocated to China. The connection is on port 443 (HTTPS), so the traffic is encrypted, but the destination is unexpected.
What happened: The application likely includes a third-party analytics or advertising SDK that reports usage data to servers in multiple countries. This is not malware, but it is a privacy concern — your usage data, and potentially more, is being transmitted to a jurisdiction with different data protection standards than you might expect.
What to do: Check the application's privacy policy for disclosure of third-party data sharing. Use Paranoid's process filter to monitor this application specifically and observe the frequency and size of these connections. Consider whether the application provides enough value to justify the data sharing, or whether a privacy-respecting alternative exists. You can whitelist the process in the baseline if you accept the behavior, or uninstall the application if you do not.
Scenario 3: Compromised IoT device C2 beaconing
You notice a new process alert from the baseline: a process you do not recognize is making periodic outbound connections to the same external IP every 300 seconds. The connections are brief (under 1 second) and transfer very little data each time.
What happened: This is a classic C2 beaconing pattern. A process on your Mac is checking in with a command-and-control server at regular intervals, awaiting instructions. The regularity of the interval and the consistency of the destination IP are the telltale signatures.
What to do: Do not kill the process immediately — note its PID, the remote IP, and the beaconing interval first. Check which binary the process is running with ps aux | grep [PID]. Check whether the binary is signed: codesign -dv [path]. If it is unsigned or signed by an unknown developer, you are likely dealing with malware. Kill the process, remove the binary, and check for launch agents/daemons that ensure persistence.
Scenario 4: Sudden connection spike from a trusted app
The baseline generates a connection count spike alert for a well-known application — say, your email client. It normally maintains 3-5 connections but is now holding 25.
What happened: This could be benign (the application is syncing a large mailbox or downloading many attachments simultaneously) or it could indicate that the application has been compromised through a malicious plugin or extension. Email clients are high-value targets because they handle credentials and sensitive communications.
What to do: Check the connection list to see where the 25 connections are going. If they are all to your email provider's servers, the spike is likely benign. If some connections go to unfamiliar IP addresses, investigate further. Check your email client's installed plugins and extensions for anything unexpected.
Scenario 5: DNS tunneling from a browser extension
You notice an unusually high volume of DNS queries from your browser process to a single domain, with subdomains that look like encoded data (long strings of alphanumeric characters with no human-readable structure).
What happened: A malicious browser extension is exfiltrating data through DNS queries. Each query encodes a small chunk of stolen data (browsing history, form inputs, cookies) in the subdomain field. The extension's DNS server decodes and reassembles the data.
What to do: Disable browser extensions one by one to identify the culprit. Start with the most recently installed extension. Remove the malicious extension, clear your browser data, and change passwords for any sites you logged into while the extension was active. Report the extension to the browser vendor.
Setting Up Traffic Inspector (60-Second Guide)
Getting Traffic Inspector running and monitoring your Mac's outbound connections takes less than a minute.
Step 1: Install Paranoid
Download Paranoid from getparanoid.app. It is a native macOS application requiring macOS 14.0 (Sonoma) or later. Drag it to your Applications folder and launch it. No external dependencies, no Homebrew packages, no Python environments, no Docker containers. Everything is built with Apple's native frameworks.
Step 2: Activate Traffic Inspector
In the Paranoid sidebar (the left command panel), find the "Traffic Inspector" section. Click the toggle switch to activate it. The monitoring loop starts immediately, and within 2 seconds you will see the first snapshot of your Mac's active connections populate the connection table.
Step 3: Review your connections
Take a moment to scroll through the connection list. You will likely see connections from your browser, email client, messaging apps, cloud sync services, and various macOS system processes (apsd for push notifications, cloudd for iCloud, nsurlsessiond for background downloads). These are all normal. Look for any process names you do not recognize or connections to unexpected countries.
Step 4: Start baseline learning
Activate the baseline learning feature. This begins a 4-hour observation phase where Traffic Inspector records the normal network behavior of every process. Continue using your Mac normally during this period — the goal is to capture a representative sample of your typical network activity. After learning completes, the system automatically transitions to active detection and begins alerting on deviations.
Step 5: Configure filters (optional)
If certain processes generate noise (for example, a development server that creates many connections during testing), you can add them to the process whitelist in the Traffic Inspector configuration. Whitelisted processes are filtered from the connection display and excluded from baseline anomaly alerts. You can also toggle the "hide loopback" option to filter out localhost connections (127.0.0.1 and ::1), which are typically internal process communication and not security-relevant.
Step 6: Enable auto-start (optional)
In Paranoid's settings, enable auto-start for Traffic Inspector. Combined with adding Paranoid to your macOS Login Items, this ensures that outbound traffic monitoring begins the moment your Mac starts, with no manual activation required. Your Mac is protected even before you sit down and start working.
Traffic Inspector vs. Other Network Monitoring Tools
Several tools exist for monitoring network connections on macOS. Here is how Traffic Inspector compares to the most common alternatives.
| Feature | Traffic Inspector (Paranoid) | Little Snitch | Lulu (Objective-See) | Wireshark | netstat / lsof (manual) |
|---|---|---|---|---|---|
| Type | Host-based IDS | Application Firewall | Application Firewall | Packet Analyzer | CLI Tools |
| Primary Function | Detect & alert | Block & allow | Block & allow | Capture & inspect | List connections |
| Behavioral Baseline | Yes (4h learning) | No | No | No | No |
| Exfiltration Detection | Yes (adaptive) | No | No | Manual analysis | No |
| Attack Pattern Matching | 42 regex patterns | No | No | Display filters only | No |
| Campaign Correlation | Yes (multi-type) | No | No | No | No |
| GeoIP Enrichment | Built-in | Yes | No | Via plugin | No |
| Process Identification | Automatic (lsof) | Automatic (kernel) | Automatic (kernel) | Limited | Manual (lsof) |
| Requires Kernel Extension | No | Network Extension | Network Extension | No | No |
| Admin Privileges | No | Yes (install) | Yes (install) | Yes (capture) | No |
| Integrated Security Suite | Yes (scanner, honeypot, WiFi IDS) | No | No | No | No |
The key distinction is architectural: Little Snitch and Lulu are firewalls — they intercept connections and require you to make allow/deny decisions. They are excellent at preventing unauthorized connections but do not analyze the connections you allow. Traffic Inspector is an intrusion detection system — it observes connections that are already permitted and analyzes them for suspicious behavior. A data exfiltration attempt through an allowed HTTPS connection will pass through Little Snitch without any alert, because you already allowed that application to connect to the internet. Traffic Inspector will catch it because it monitors the upload rate and compares it against the process's behavioral baseline.
Wireshark is the gold standard for packet-level analysis, but it is a manual investigation tool, not an automated monitoring system. It requires admin privileges for live capture, generates enormous amounts of raw data, and has no built-in behavioral analysis or alerting. It is indispensable for forensic investigation after an incident, but it is not a practical tool for continuous monitoring.
The optimal security posture combines multiple approaches: a firewall (Little Snitch or Lulu) for connection control, Traffic Inspector for behavioral detection, a network scanner for device inventory, and a honeypot for internal threat detection. Paranoid integrates three of these four capabilities into a single application.
Frequently Asked Questions
How does Traffic Inspector detect data exfiltration on my Mac?
By monitoring per-process upload rates with adaptive thresholds. Traffic Inspector parses netstat output every 2 seconds to enumerate all active connections, enriches each connection with the responsible process name via lsof, then calculates per-process upload rates by comparing consecutive bandwidth snapshots. When any process exceeds its adaptive upload threshold (calculated as the historical mean plus two standard deviations, with a default floor of 5 MB/s), the system generates a critical data exfiltration alert. This approach catches both sudden bulk uploads and gradual data siphoning that deviates from the process's established behavior.
Does Traffic Inspector require admin or root privileges?
No. Traffic Inspector uses two standard macOS system commands — /usr/sbin/netstat for connection enumeration and /usr/sbin/lsof for process-to-connection mapping — neither of which requires elevated privileges to inspect your own user's connections. The feature runs entirely with normal user permissions. No kernel extensions, system integrity modifications, or administrator passwords are needed.
Will monitoring my network traffic slow down my Mac?
No. The monitoring loop runs every 2 seconds (configurable) and executes two lightweight system commands. The lsof results are cached for 5 seconds to avoid redundant execution. Network enrichment (reverse DNS, GeoIP) is batched to a maximum of 5 lookups per cycle and cached for 5 minutes per IP. The entire pipeline runs as a Swift actor with async/await concurrency, ensuring it never blocks the main thread or UI. In practice, CPU usage is negligible even on older hardware.
What is the difference between Traffic Inspector and Little Snitch?
Little Snitch is a firewall; Traffic Inspector is an intrusion detection system. Little Snitch intercepts and blocks connections at the network extension level, requiring explicit allow/deny rules for every connection. Traffic Inspector observes and analyzes connections without blocking them. It uses behavioral analysis — baseline learning, adaptive thresholds, pattern matching — to detect anomalies like data exfiltration, C2 beaconing, and port scanning. The two are complementary: Little Snitch prevents connections, while Traffic Inspector detects suspicious patterns in the connections that are allowed through.
Can Traffic Inspector detect command-and-control (C2) beaconing?
Yes. Through two mechanisms. First, the baseline deviation engine flags processes that suddenly begin connecting to new countries, new IP prefixes, or new ports never observed during the learning phase. Second, the connection timeline tracks appeared and disappeared connections over time, making periodic reconnection patterns visible. A process that connects to the same external IP at regular intervals — a hallmark of C2 beaconing — will generate baseline anomaly alerts and show a distinctive repeating pattern in the connection timeline.
How long does the baseline learning phase take?
4 hours by default. During this phase, Traffic Inspector observes the normal network behavior of every process on your Mac — which remote ports they connect to, which countries and IP prefixes they contact, and their typical connection counts. After learning completes, the system automatically transitions to active detection mode. You can also manually activate detection at any time to shorten the learning period. The baseline continues to learn incrementally during active mode: consistently observed new behaviors are automatically incorporated after 5-10 repeat observations, so the system adapts to legitimate changes in your workflow without manual intervention.
Your Mac is connected to the internet right now, and it is maintaining more network connections than you realize. Most of those connections are legitimate — your applications doing exactly what they are supposed to do. But all it takes is one compromised application, one malicious extension, one supply-chain attack on a tool you trust, and your sensitive data starts flowing out through an ordinary-looking HTTPS connection to a server you have never heard of. You would not know it was happening until the consequences arrived: unauthorized account access, stolen credentials, leaked documents, financial fraud.
The macOS security model protects you at the perimeter — it verifies signatures, checks for known malware, and controls access to sensitive resources. But it does not monitor what happens after those gates are passed. It does not watch the outbound connections. It does not learn what your applications normally do and alert you when they deviate. It does not calculate per-process upload rates and flag anomalous data transfers. That monitoring layer — the one that watches the data leaving your Mac and raises the alarm when something is wrong — has been missing. Until now.
Paranoid's Traffic Inspector gives you complete visibility into your Mac's outbound network activity. Every connection mapped to its owning process. Every remote server identified by IP, hostname, and country. Every upload rate tracked, baselined, and compared against adaptive thresholds. Every anomaly detected and surfaced as a clear, actionable alert. It takes 60 seconds to set up, runs silently in the background, and consumes virtually no resources. It is the difference between trusting that your applications are behaving correctly and knowing that they are.
Because in network security, what you cannot see can hurt you. And right now, there might be a process on your Mac sending data somewhere it should not.
See exactly what your Mac is sending over the network
Download Paranoid and activate Traffic Inspector in one click. Monitor every outbound connection, detect data exfiltration in real time, and get alerted the moment something suspicious happens — all from a native macOS app.