#1154: Allow signed manifests to eliminate single point of compromise
--------------------------+-------------------------------------------------
 Reporter:  jgoldschrafe  |        Owner:  community 
     Type:  enhancement   |       Status:  new       
 Priority:  normal        |    Milestone:            
Component:  library       |      Version:            
 Severity:  normal        |   Resolution:            
 Keywords:                |        Stage:  Unreviewed
    Patch:  None          |   Complexity:  Unknown   
--------------------------+-------------------------------------------------
Comment (by jgoldschrafe):

 This is definitely a much more difficult problem to solve than static
 packages, because all of the responses from the Puppet server are
 obviously not going to be the same and can't just be signed with the key
 on a different server. But something like this is what I'm thinking:

  1. A public/private key pair is generated. The public keys are
 distributed to the Puppet clients. The private key is encrypted with a
 passphrase.
  1. A secure mode is turned on for the Puppetmaster. In this mode,
 Puppetmaster does not automatically reload manifests. It must be restarted
 manually. When restarted, the Puppetmaster's startup procedure prompts the
 user for a passphrase, like Apache when using encrypted certificates. This
 key is used to sign all communications between the Puppetmaster and
 clients.
  1. The clients verify each message against the public key. If the
 signature doesn't match the signature the client is expecting, the
 manifest is discarded and a warning is raised.

 It seems like this kind of model wouldn't be difficult to shoehorn into
 Puppet's existing SSL model, though I don't know anything about how it
 ties into WEBrick/Mongrel internally.

 This still has the following weaknesses:

  1. The server can be silently compromised, and before attempting to
 replace any manifests, the Puppetmaster binary can be replaced with one
 that fishes the passphrase or stores the unencrypted key for the attacker
 to use later.
  1. Once rooted, the key can be fished out of memory, whether obfuscated
 or not.

 However, assuming a workable security infrastructure is already in place,
 and the administrator is capable of automatically verifying system
 binaries before reloading the manifests, this allows an administrator to
 detect the intrusion and simply correct the problem and reinstall the
 server before malicious manifests can be deployed across the network.

 Regardless of approach, Puppet could really benefit from some mechanism to
 mitigate cross-network compromises.

-- 
Ticket URL: <http://reductivelabs.com/trac/puppet/ticket/1154#comment:2>
puppet <http://reductivelabs.com>
Puppet - Portable System Automation
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Puppet Bugs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/puppet-bugs?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to