Greetings - I was directed to this list as the place where stuff is getting
done on package signing. I would like to share some thoughts on this which I
hope you'll give some serious consideration. One, I would like to convince you
to change your order of operations slightly to the benefit of both users and
developers, and two I would like to share some thoughts on open security
approaches.
First, thanks to Allan and the others who have put some real effort into making
this a reality.
Nevertheless it is proceeding very slowly and from what I gather is not being
given much priority. Obviously that's because the devs don't feel it is worthy
of priority. So be it. But if you're going to proceed this slowly with it,
please consider changing your order of operations so we users can help
ourselves. Specifically, please put providing signatures first, even before
your automated signature checking or your final design is complete. If you
need to later change how the signatures are stored or keys or other details,
that's fine. But get the packages signed and get the signatures onto the
mirrors in some usable form.
You're currently having armchair debates about arcane replay attacks while the
data on the servers is sitting there completely unprotected, and users have no
way of verifying its authenticity. Just getting the signatures out there will
improve security by several orders of magnitude. The threat is not just a
matter of data integrity on the mirrors, but providing a way for users to
verify data coming over their networks, from shared caches, stored locally,
etc. As one commenter on my blog expressed:
"I think you’ve motivated me to try another Linux distribution after years
with Ubuntu. You’ve interested me in Arch too, but there is no way I’m
going to install it on my desktop, let alone server before they implement
package signing. Their mailing list suggests that this is a milestone of
not so near future. Unsigned package installation is a security breach of
cyclopic proportions, anyone who hacks your old wifi AP will be able to
inject malicious Arch packages by repository proxying, this isn’t even
possible with Windows updates."
And repository proxying is just one of a whole host of security issues unsigned
packages create, which have nothing to do with the security of the mirrors.
It's a local thing. Arch is depending on very flimsy security through
obscurity at this point - hoping no one will go to the trouble - and providing
no options to users.
If you require the packagers to routinely sign packages now with their keys,
get their keys onto key servers, and get the package signatures on the mirrors,
at least we have some way of verifying the data. You don't need to rewrite GPG
- it's there. I for one would be happy to write a script that scans the pkg
cache and checks the sigs. This way when someone says "Arch doesn't have
package signing" we can reply "Actually packages ARE signed - we're working on
the automatic checking, until then check them yourself". Archers are very good
at this sort of thing. But we can't do anything until the sigs are available,
and that requires a minimum of effort on your part. It's probably already
implemented. And the security precautions you need to take at this point are
minimal - just publish the signatures somewhere - they are self-protecting.
You don't have to tell anyone what they should do with them or how they are
best used - let us worry about that for now.
This will also give you the time to get pacman's automated signature checking
available on your own timetable, while your servers have some minimal
protection (actually quite a bit). Plus instead of rolling out the whole
system at once, you'll have the signing and distribution of signatures and keys
already in use - perfect for you to test your checking on the real mirrors, and
to be exposed to some of the issues that will arise. And you'll have scripts
by then which can double-check your checking, so you don't have to feel like
everyone's security is on your shoulders alone. As you've probably noticed by
now, security development is a high stress endeavor. Break up the load and let
problems be found in a more gradual way.
Users who have higher security needs or who operate on questionable networks
will then have a way to verify their packages. Users who don't want to be
bothered can wait until you finish your pacman adjustments.
In short, please make the signatures and keys available ASAP. That's great
you're working on your security design and automatic checking, taking your time
and being careful, but at least give us some sigs for now so we can help
ourselves.
On the subject of security formats and protocols, I wanted to throw a few ideas
in there. First, I think keeping it simple is very important, especially for
Arch. I believe any user with GPG should be able to verify a package, no other
tools required, and no digging into databases for signatures.
Instead of placing signatures in a db file, I think serious thought should be
given to using the built-in encapsulation features of GPG. Why have a separate
sig file or db mechanism? Wrap the data in the signature - that way it begs to
be checked. It can be as simple as package.tar.gz.gpg And checking it can be
as simple as manually running the package through GPG. This is very good for
security - users can use GPG directly to examine signatures, keyrings, and
anomalies. (Pacman in the short term could be adjusted so it simply removes
the signature layer without checking.)
Also, devs love to make code efficient, but in this area consider not making
that your top priority. There are many PGP/GPG libraries which are
ill-maintained compared to the long-lived GPG, and they can introduce security
problems. They also further remove the user from control of security, which
makes for bad security. I suggest having pacman run gpg for its security
needs, in a transparent way to the user. No reliance on other libraries. This
will have a minor cost in efficiency, but it is a good KISS model and in the
long run will improve security. (Many of the PGP APIs were little more than
attempts to weaken PGP.) This also makes your job easier. Why reinvent the
wheel? The command line does just fine, and gpg gets much more scrutiny in
cryptographic circles than the many libraries that allege to duplicate it. Use
the real article.
When modifying pacman, don't make it overcomplicated. I think users should
have some way to specify a custom keyring to be used, and a way to disable or
ignore signature checking. Beyond that, keep it minimal and simple. The more
complex you make it, the less secure it will be in real world applications.
As for replay attacks, you may want to consider this an opportunity to change
the way package management is handled more generally. It has some weaknesses
that are not based solely in package integrity. If you try to address those
weakness with the wrong tools (such as signatures), you're going to create an
unnecessarily complex system with compromised security. I suggest making
package signatures available now, then working carefully on the overall
management system. Change is good.
Obviously Arch devs are new to some of these security models, which I believe
is one reason you have shown so much reluctance to tackle it. You don't want
to mess it up and be embarrassed. Everyone who works in security plays the
fool sometimes - ask Phil. Security is very tough and imperfect work compared
to many areas of development, cryptographic security especially so. But don't
let this reluctance make you choose a total lack of security, which is the
current status quo in Arch packaging. Do your best with it, move on, and do
your best some more.
The weakest link in your security BY FAR will be the key maintenance practices
of the packagers, and the security of their personal systems. They should be
advised to self-sign their keys, have their keys signed by others, use strong
passphrases, not use passphrase caching or convenience tools of any kind, have
6 month expiration dates on keys, and revoke keys routinely anytime local
system security may have been compromised. This issue completely blows away
replay threat models in severity, and its an imperfect science. You just do
your best. But some guidelines should be provided to packagers at some point,
and should be enforced where possible.
Yet on these issues, please don't debate them before providing signatures to
current packages. Get it started, imperfect as it is. If you change keys,
file formats, or protocols later, than is not only fine, but such changes
should be considered a routine part of the development of Arch's secure package
management. Let's get it started.