Why admin's do not trust daemons to do their own packet filtering (was Re: Resuming the great cleanup)

Eric S. Raymond esr at thyrsus.com
Tue May 29 19:15:15 UTC 2018


Mark Atwood, Project Manager <mark.atwood at ntpsec.org>:
> There are a couple of different but very similar angles of approach to
> explain why a network security experts will not trust a userspace daemon to
> control it's own defensive packet filtering.
> 
> The UNIX concept: each tool should do one thing, and do it well.   The ntpd
> should no more do packet filtering than the packet filers should implement
> the NTP protocol.
> 
> Separation of knowledge.  The packet filers know how the network stack is
> implemented, and how the local site has plumbed them.  Repeating this
> knowledge in the ntpd violates DRY, and are hard to keep in sync.
> 
> Separation of configuration.  Network configuration tools know to speak to
> the packet filter API and know to speak to the switch APIs.   Asking those
> tools to speak to every random daemon's implementation of each own control
> interface is asking too much.
> 
> Assumption of mistrust.  Admins and devops people now assume (after 40+
> years of bitter experience) that all daemons are broken and insecure.  That
> lack of trust extends to any given daemon's own (probably half assed and
> poorly reviewed) implementation of packet filters.
> 
> Assumption of corruption.  Once a bad guy has presented a malicious packet
> stream to a daemon, you cannot trust that daemon's own logging, or trust
> any part of that daemon's execution paths. Including the execution of it's
> own packet filters!
> 
> Linus's Law, and it's weaknesses.  The packet filters are the point where
> Linus's Law has engaged about packet filtering.  The slightest quiver of
> uncertainly in the packet filter implementations will trigger CERT
> conference calls, corporate sev2 incidents, and personal line-by-line
> hand-execution code audits by technical leads.   The discovery of yet
> another parsing bug in a userspace daemon is called a "Tuesday".
> 
> The "half of common lisp" narrative.  Just like every large programmable
> system eventually has a poorly specified implementation of parts of Lisp,
> every local single process userspace implementation of packet filtering is
> just a poorly specified poorly performent implementation of the the packet
> filter.

That's a good explanation.  I'm keeping a copy.

(Gradually, gradually, I remedy my ignorance of infosec.)

I could summarize it something like this:

"We have removed packet filtering by interface name because we judge it's
a security-defect attractor.  The place to do this is in kernel-level packet
filters and firewalls, which get much more scrutiny; good admin practice 
in this century is to not trust usespace packet filtering at all."

This opens a can of worms, though.  Should we drop the entire interface command?

[[interface]]
+interface+ [+listen+ | +ignore+ | +drop+] [+all+ | +ipv4+ | +ipv6+ | +wildcard+ | 'name' | 'address'[/'prefixlen']]::
  This command controls which network addresses +ntpd+ opens, and
  whether input is dropped without processing. The first parameter
  determines the action for addresses which match the second parameter.
  That parameter specifies a class of addresses, or a specific interface
  name, or an address. In the address case, _prefixlen_ determines how
  many bits must match for this rule to apply. +ignore+ prevents opening
  matching addresses, +drop+ causes +ntpd+ to open the address and drop
  all received packets without examination. Multiple +interface+
  commands can be used. The last rule which matches a particular address
  determines the action for it. +interface+ commands are disabled if any
  of the +-I+, +--interface+,+-L+, or +--novirtualips+ command-line options
  are used. If none of those options are used and no +interface+ actions
  are specified in the configuration file, all available network
  addresses are opened. The +nic+ command is an alias for +interface+.

I'm inclined to think dropping this would be a good thing.  There's a
lot of code complexity behind that, and that bit abour interface
commands being inoperative if you choose the wrong command-line option
raises my shoot-self-in-foot alarm.

I'd like to hear from our security officer about this.  I'd also lilke
to hear from people with lots of ops experience like Hal and Matt.
-- 
		<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>

My work is funded by the Internet Civil Engineering Institute: https://icei.org
Please visit their site and donate: the civilization you save might be your own.




More information about the devel mailing list