SECURITY / ARCHITECTURE
Microsegmentation made networks safer: no computer reaches another unless a rule allows it. Picosegmentation does the same inside the code. No part of the program reaches another unless a gate allows it. iSCSI4NAS is built this way.
Everything in code has an effect. An admin password just as much as a simple HTTP request. Picosegmentation gives every effect its own zone.
Microsegmentation divides the network into segments. Picosegmentation divides the program code into layers and zones. The layers are input, processing and output. Processing is further divided into zones: a password is handled in a different zone than a simple HTTP call.
Between two zones there is exactly one passage, the gate. That is where the decision is made whether an operation may take place. There is no second way. An effect only happens at a gate in the code.
This leads to the most important sentence on this page: a bug may sit in its zone. It cannot be used for the effect of another zone, because the way there does not exist.
Security does not end where the hardware ends.
A boundary where checking stops is a gap. Microsegmentation closes that gap in the network. Picosegmentation closes it in the code, exactly where bugs actually happen.
Computer science has known the individual building blocks for decades, such as permissions attached to objects, type checking and separated privileges. The protection only comes from the closed architecture that joins them into a whole inside the code. Aviontex developed this architecture.
The SI prefix security model arranges protection in five levels. The names are familiar from units such as micrometre and nanometre: each step is finer than the one before. Picosegmentation is one of these levels, the level in the code.
| Level | What is separated |
|---|---|
| Micro | Network and connections |
| NanoiSCSI4NAS | Processes and sandboxes: separate processes for iSCSI and for the app |
| PicoiSCSI4NAS | Program code: layers and zones |
| Femto | Hardware |
| Atto | Microarchitecture of the chip |
No level replaces another. iSCSI4NAS implements Picosegmentation fully in its own code. For Nano it uses Apple's platform building blocks: separate processes and sandboxes. That is why the app can be updated without closing the connections to the NAS. For the other levels it relies on your network, Apple's hardware and the chip maker.
Today security is mostly found after the fact: write code, find the hole, ship a patch. Picosegmentation turns that around.
Every program has bugs. With Picosegmentation they have no way to an effect. Data from the network stays data. It never becomes program code, control or configuration. Attacks such as injection lose their basis, not just a single hole.
Every effect needs its gate. Anyone who tries to create an effect without a gate notices it right away. Decisions happen at a few named places, they are logged and every rejection states its reason. A logic error therefore shows up early: during development, in operation and in review.
Every operation needs a permission that only comes into being at the intended gate. Changing the code breaks this chain. iSCSI4NAS then stops and shows the place. macOS adds its part: a modified program loses its signature and macOS does not load the driver.
What if PHP had been built with Picosegmentation?
In October 2026 PHP servers around the world had to be updated urgently. Two holes in the core of PHP allowed running foreign code without logging in (CVE-2026-109618 and CVE-2026-109619, fixed in PHP 8.5.12). In the first, an upload exhausts memory and the cleanup treats a half finished request as valid. In the second, state from one request slips into the next.
Both follow the same pattern as many holes before them: something that should only be data reaches an effect it was never meant for. With Picosegmentation that way does not exist. This makes PHP a good thought experiment. It is not a criticism of PHP. PHP has fixed many of these problems itself over the years.
The basic problem: classic PHP had only one type for almost everything, text. Four properties came on top:
$_GET, $_POST and $_COOKIE could be read on any line, unchecked.eval, include and unserialize undermined any order.So any value from a request could be used anywhere for any effect: as a database query, as HTML, as a file name, as a shell command or as code. Read does not mean trustworthy. Stored does not mean approved.
The proof takes seconds. Take a known class of bugs in which text from the network reaches an effect. Then ask which passage it took to get there. With Picosegmentation that passage does not exist. This holds not for single holes but for whole classes.
| Class of bug | What happened | With Picosegmentation |
|---|---|---|
| Memory and state (October 2026) | An upload with any number of header lines exhausts memory. The cleanup treats the half finished request as valid. State from one request is read in the next. | The bug stays in the zone that reads the upload. Cleanup and session live in their own zones and accept only what their gate releases. A half finished request is not a valid value there. |
| register_globals | ?admin=1 in the address became the variable $admin in the program. Data from the network turned directly into program state. | There is no way from the request into program state. Input reaches the program only through a gate, as checked values with an origin. |
| SQL injection | Input was inserted into database queries and executed by the database as a command. | Queries are built only on a dedicated path with placeholders. An input value stays a value and never becomes part of the command. |
| Remote file inclusion | include($_GET['page']) let foreign code be loaded and run from outside. | What may be loaded is on a fixed list. A value from the request can never become a load target. |
| Class of bug | What happened | With Picosegmentation |
|---|---|---|
| Cross-site scripting | Input ended up unfiltered in the HTML of a page and ran as a script in other users' browsers. | HTML is produced only through the output gate. An input value stays text there and never becomes markup or script. |
| Object injection | unserialize() created arbitrary objects from network data. Their automatic methods could run code. | Only defined types come into being, each through its own gate. Network data cannot create an object of its choice. |
| Type juggling | The loose comparison "0e123" == "0e456" was true because PHP read both strings as numbers. Logins could be bypassed this way. | A token is its own type with a fixed comparison. It is never read as a number. |
| Code from input | eval(), preg_replace with the /e modifier or function calls with names from the request ran input as code. | What may be called is fixed. A name from the request can never become a call. |
| magic_quotes | PHP escaped every input across the board without knowing where it would go. That often failed to protect and caused damage elsewhere. | Escaping happens only at the gate into the specific effect, matched to exactly that effect. Never across the board at the entrance. |
| Place | What the code does | What it leads to |
|---|---|---|
Zend/zend_alloc.czend_mm_safe_error |
Memory runs out. The code resets the marker and aborts the request.
|
The abort leads into the cleanup of the request. The cleanup treats the half finished request as valid. |
main/rfc1867.cmultipart_buffer_headers |
Every header line of an upload is stored. There is no limit on their number.
|
Bytes from the upload decide how much memory is used. That is how an ordinary upload exhausts memory. |
ext/session/session.cearly_find_sid_in |
The session reads global values before the next request has its own state.
|
What the previous request left behind, the next one reads as its own state. |
Segmentation at the wrong level. PHP did try protection through separation: with safe_mode, open_basedir and disable_functions. These are coarse barriers for the whole process. The effects inside the code stayed unseparated.
The safe way already existed. PHP had known queries with placeholders for a long time. But they were one option among several. With Picosegmentation they would have been the only way.
The result: there would still have been bugs in the code. But they would have stayed in their zone, because no way would have existed for text from the network to reach one of these effects. iSCSI4NAS is built exactly this way. What text from a request is for PHP, the data coming from the NAS over the network is for iSCSI4NAS.
Picosegmentation does not need a fresh start.
Nobody has to change millions of lines of code at once. Just as microsegmentation grows segment by segment in a running network, Picosegmentation grows zone by zone in the code. You begin at the critical place, where data turns into an effect: where data comes in from the network, where something is stored and where something is executed.
This one gate already takes a path away from an attack. Every further update brings the next zone while the software stays in use. Nothing changes on the outside: interfaces and behaviour stay the same. This is days and weeks, not years.
Every block you store on or read from your NAS passes through the initiator. That can include very sensitive data.
An attack on the initiator would therefore always be an attack on your data too: changing it unnoticed, mixing it between drives or redirecting it to a foreign target. Picosegmentation is there for the security of the initiator, for you and for your data.
Inside the initiator there is no way for such attacks. The description of a connection is kept apart from everything that comes in over the network. Data from the network therefore cannot redirect a connection. A read or write applies only to exactly the connection and exactly the drive it was approved for. And if the program is tampered with, it stops. It does not keep working on your data unnoticed with changed rules.
On its way through your network the data is currently unencrypted. That stretch is protected by the network level, meaning your own network between Mac and NAS.
See for yourself: in the app, iSCSI4NAS shows the result of the Picosegmentation integrity test under Diagnostics › Security and whether the connection between interface and core is authenticated.

iSCSI4NAS is picosegmented from the first line. Every effect has its zone and every zone has its gate. Data from the network stays data. A tampered app stops working. macOS does not load a driver without a valid signature.