Little Snitch For Catalina

Posted : admin On 28.12.2020

Update on October 30, 2019: This issue is fixed in macOS 10.15.1.

Mar 31, 2020 Little Snitch gives you control over your private outgoing data.Track background activityAs soon as your computer connects to the Internet, applications often have permission to send any information wherever they need to. Little Snitch takes note of this activity and allows you to decide fo. Mar 30, 2020 Added compatibility with macOS Catalina (10.15). Little Snitch now monitors access to Berkeley Packet Filter devices. You can create rules to allow or deny access to these devices for particular applications. Improved display of information retrieved from an app’s Internet Access Policy. Objective Development recommends that you upgrade Little Snitch before upgrading to Catalina to ensure that rules for system apps are correctly updated. The network traffic management utility also enables you to disable notifications about potential consequences when you deny a connection on a per-application basis, adds support for additional remote endpoint types, ensures that clicking a column.

In this article we’d like to outline some technical details about how the installation of a kernel extension works on macOS Catalina, about potential pitfalls in this process, what can go wrong, and what currently unfortunately does go wrong.

It’s for those of you with some technical background, who want to know how things work. It explains the intricate paths that the code in third party kernel extensions takes until it finally ends up in the kernel. Almost all of the information presented here was reverse-engineered.

When your Mac starts up, the very first thing to happen is the loading of the macOS kernel. To make this work, there are a couple of related technologies that must play nicely together:

  1. Kernel prelinking. The kernel is the first component of the operating system to start. It has no other tools available. In particular there is no way to check code signatures, and all file system access is very hard at this point. Apple therefore decided to prelink the bare kernel with all kernel extensions every time the kernel or one of the extensions is updated, and to start only that prelinked kernel at boot time.
  2. Read-only system volume. Apple decided to store the operating system on a read-only volume in order to prevent tampering by malware. The prelinked kernel is also stored on this read-only system volume.
  3. Updates of the prelinked kernel. Since the prelinked kernel is on a read-only volume, it cannot be updated directly. Apple had to conceive a new mechanism for updates.

Prelinked kernels are built by /usr/sbin/kextcache. This tool links the kernel at /System/Library/Kernels/kernel with kernel extensions from /System/Library/Extensions/ and /Library/Extensions/, checking code signatures and other prerequisites. The resulting prelinked kernel is written to /Library/Apple/System/Library/PrelinkedKernels/prelinkedkernel, a path which is on a writable volume and which is under System Integrity Protection (SIP) to prevent tampering.

Every time the directory /Library/Extensions/ is touched, the kextd daemon starts kextcache to build a new kernel.

However, the boot procedure does not use this new kernel. It uses the kernel at /System/Library/PrelinkedKernels/prelinkedkernel, which is on the read-only system volume. The kernel must be somehow copied to the read-only volume.

Little Snitch For Catalina Bay

In addition to building the new prelinked kernel, kextcache installs a shell script in /var/install/shove_kernels. This script contains a call to /usr/sbin/kcditto, a tool which copies the kernel to its final destination at /System/Library/PrelinkedKernels/prelinkedkernel.

But the original problem still exists: The final destination is a read-only volume and SIP disallows remounting it in read/write mode. So when should the system run shove_kernels?

The best time is immediately before system shutdown. When you reboot or shut down your machine, launchd stops all processes. Then it remounts the system volume in read/write mode. This is possible because launchd has the entitlement com.apple.private.apfs.mount-root-writeable-at-shutdown. Then it runs /var/install/shove_kernels to copy the new kernel. All should be fine now.

The procedure outlined above fails on Catalina Beta 6 and newer, at least up to the public 10.15.0 release. In the last step, the kernel is not copied. It’s hard to debug the problem because the copying happens at a time when all system services have been shut down and log messages are no longer written to disk.

We have configured our test machine for verbose logging, and even then it’s very hard to check the logs. First, verbose logging does not work reliably. Sometimes it just does not switch to verbose mode or the screen turns black before log messages are written. And even if there is a verbose log, the font is tiny and a screen full of text appears for fractions of a second. We captured it with a camera and found the following messages:

We can see that remounting the system volume in read/write mode fails, in spite of the entitlement. The problem does not occur if SIP is disabled. This is an obvious bug, either in launchd or in the entitlements subsystem.

Not upgrade kernel extensions until Apple fixes the issue

This is the easiest workaround. Just wait until Apple has fixed the issue and then upgrade. We have changed our software update feed for Little Snitch to hide updates for Catalina users until Apple has fixed the problem. All those who have already upgraded Little Snitch and the kernel extension version is out-of-sync, please downgrade to the same version as linked into the current kernel. See this FAQ article for details.

Little Snitch 4 License Key

Update the kernel in macOS Recovery

Since SIP does not apply in macOS Recovery, you can boot into this mode and trigger a kernel update there:

  1. Restart your system in macOS Recovery. Learn more
  2. If you have enabled FileVault to encrypt the contents of your system volume, you first have to mount that volume: Open “Disk Utility”, select your system volume in the sidebar and click the “Mount” button in the toolbar. Please be patient – mounting FileVault volumes may take quite a while. Once the volume is mounted, quit the “Disk Utility” application.
  3. Open “Terminal” from the Utilities menu in the menu bar.
  4. Enter the following command:
    touch -c '/Volumes/Macintosh HD/System/Library/Extensions'
    Important Note: If your system volume has a different name than “Macintosh HD”, replace this name with the actual name of the volume on which macOS Catalina is installed.
  5. Wait about 10 seconds. Then choose “Restart” from the Apple menu in the menu bar to restart your computer. Shutting down can take up to a few minutes because the system is rebuilding the boot cache in the background. Note that during this time no progress indication is shown.

Disable SIP

This is not recommended. But since the error occurs when launchd tries to remount the system volume in read/write mode and this limitation is a part of SIP, the update succeeds when SIP is disabled. There are no step-by-step instructions from Apple, but the Internet is full of instructions for how to disable SIP.

You probably came here because your Mac showed a message telling you that software from “Objective Development Software GmbH” (Little Snitch) loaded a system extension that will no longer be compatible with a future version of macOS and that you should contact us, the developer, to get more information. Well, here you are.

In order to be able to perform filtering of network traffic, Little Snitch 4 installs a kernel extension (the above mentioned “System Extension”) which is based on Apple’s “Network Kernel Extension” API (NKE).

This API will be deprecated in a future version of macOS and replaced with a new “NetworkExtension” API (NE). Despite their similarity in name, these two APIs work very differently, so the underpinnings of Little Snitch do require a substantial rework.

Will there be an updated version of Little Snitch that is compatible?

Yes. We are going to release an update of Little Snitch that will utilize the compatible replacement APIs.

When will Little Snitch 4 become incompatible?

We expect the deprecation to become effective with the next major release of macOS. There’s no official release date from Apple, but based on the release schedule of recent years it will not be before this fall. Little Snitch 4 will then not be loaded by the operating system, but there will still be an option to allow the loading. [1]

What happens in the unlikely case that no updated version of Little Snitch is available at that time?

Rainbow ice cream cooking download. We do our best to have an updated version available right in time. But if you’re still concerned – keep in mind that there will be an option in macOS to allow running Little Snitch 4.

If I buy Little Snitch 4 now, will I get the update for free?

Yes. All licenses sold now include a free upgrade to Little Snitch 5. In addition, customers who purchased Little Snitch 4 within a one-year period prior to the final release of Little Snitch 5 (about this fall) will also get a free upgrade. And if you purchased Little Snitch 4 before that period, we will offer you an upgrade at a reduced price.

When will Little Snitch be updated to the new APIs?

The replacement APIs that are currently available (NetworkExtension framework on macOS 10.15.4) are not yet completely sufficient to implement the full functionality of Little Snitch. But we are working closely with Apple to fill the remaining gaps and we expect that a beta of the next major macOS version (most likely available at the next WWDC) or even an upcoming version of 10.15 will provide what is missing. As soon as the APIs allow us, we will complete the transition of Little Snitch to the new NetworkExtension API. It’s our goal to provide a public beta in June 2020 and a stable version in October.

  1. The relevant sentence in Apple’s statement to developers is: “Future OS releases will no longer load kernel extensions that use deprecated KPIs by default.” ↩︎