1
0
Fork 0
mirror of synced 2024-05-08 06:22:27 +12:00
itpol/linux-workstation-security.md

769 lines
34 KiB
Markdown
Raw Normal View History

# Linux workstation security checklist
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
This is a set of recommendations used by the Linux Foundation for their systems
administrators. All of LF employees are remote workers and we use this set of
guidelines to ensure that a sysadmin's system passes core security requirements
in order to reduce the risk of it becoming the attack vector against the rest
of our infrastructure.
Even if your systems administrators are not remote workers, chances are that
they perform a lot of their work either from a portable laptop in a work
environment, or set up their home systems to access work infrastructure for
after-hours/emergency support. In either case, you can adapt this set of
recommendations to suit your environment.
This, by no means, is an exhaustive "workstation hardening" document, but
rather an attempt at a set of baseline recommendations to avoid most glaring
security errors without introducing too much inconvenience. You may read this
document and think it is way too paranoid, while someone else may think this
barely scratches the surface. Security is just like driving on a highway --
anyone going slower than you is an idiot, while anyone driving faster than you
is a crazy person. These guidelines are merely a basic set of highway safety
rules that is neither exhaustive, nor a replacement for experience, vigilance,
and common sense.
2015-08-10 15:25:10 +12:00
Each section is split into two areas:
- The checklist that can be adapted to your project's needs
- Free-form list of considerations that explain what dictated these decisions
## Severity levels
The items in the checklist include the severity level, which we hope will help
guide your decision:
- _(CRITICAL)_ items should definitely be high on the consideration list.
If not implemented, they will introduce high risks to your workstation
security.
- _(MODERATE)_ items will improve your security posture, but are less
2015-08-11 09:54:04 +12:00
important, especially if they interfere too much with your workflow.
2015-08-10 15:25:10 +12:00
- _(LOW)_ items may improve the overall security, but may not be worth the
convenience trade-offs.
- _(PARANOID)_ is reserved for items we feel will dramatically improve your
workstation security, but will probably require a lot of adjustment to the
way you interact with your operating system.
Remember, these are only guidelines. If you feel the severity levels do not
reflect your project's commitment to security, you should adjust them as you
see fit.
2015-08-05 13:44:50 +12:00
## Choosing the right hardware
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
We do not mandate that our admins use a specific vendor or a specific model, so
this section addresses core considerations when choosing a work system.
2015-08-05 13:44:50 +12:00
### Checklist
2015-08-10 15:25:10 +12:00
2015-08-05 13:44:50 +12:00
- [ ] System supports SecureBoot _(CRITICAL)_
- [ ] System has no firewire, thunderbolt or ExpressCard ports _(MODERATE)_
- [ ] System has a TPM chip _(LOW)_
2015-08-05 13:44:50 +12:00
### Considerations
2015-08-10 15:25:10 +12:00
2015-08-05 13:44:50 +12:00
#### SecureBoot
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
Despite its controversial nature, SecureBoot offers prevention against many
attacks targeting workstations (Rootkits, "Evil Maid," etc), without
introducing too much extra hassle. It will not stop a truly dedicated attacker,
plus there is a pretty high degree of certainty that state security agencies
have ways to defeat it (probably by design), but having SecureBoot is better
than having nothing at all.
2015-08-06 09:13:40 +12:00
Alternatively, you may set up [Anti Evil Maid][1] which offers more wholesome
protection against the type of attacks that SecureBoot is supposed to prevent,
but it will require more effort to set up and maintain.
2015-08-05 13:44:50 +12:00
#### Firewire, thunderbolt, and ExpressCard ports
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
Firewire is a silly standard that, by design, allows any connecting device full
direct memory access to your system ([see Wikipedia][2]). Thunderbolt and
ExpressCard are guilty of the same sin, though some later implementations of
Thunderbolt attempt to mitigate this vulnerability. It is best if the system
you are getting has none of these ports, but it is not critical, as they
usually can be turned off via UEFI or disabled in the kernel itself.
2015-08-05 13:44:50 +12:00
#### TPM Chip
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
Trusted Platform Module (TPM) is a crypto chip bundled with the motherboard
separately from the core processor, which can be used for additional platform
security (such as to store full-disk encryption keys), but is not normally used
for day-to-day workstation operation. At best, this is a nice-to-have, unless
you have a specific need to use TPM for your workstation security.
## Pre-boot environment
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
This is a set of recommendations for your workstation before you even start
with OS installation.
2015-08-05 13:44:50 +12:00
### Checklist
2015-08-10 15:25:10 +12:00
2015-08-05 13:44:50 +12:00
- [ ] UEFI boot mode is used (not legacy BIOS) _(CRITICAL)_
- [ ] Password is required to enter UEFI configuration _(CRITICAL)_
- [ ] SecureBoot is enabled _(CRITICAL)_
- [ ] UEFI-level password is required to boot the system _(LOW)_
2015-08-05 13:44:50 +12:00
### Considerations
2015-08-10 15:25:10 +12:00
2015-08-05 13:44:50 +12:00
#### UEFI and SecureBoot
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
UEFI, with all its warts, offers a lot of goodies that legacy BIOS doesn't,
such as SecureBoot. Most modern systems come with UEFI mode on by default.
Make sure a strong password is required to enter UEFI configuration mode. Pay
attention, as many manufacturers quietly limit the length of the password you
are allowed to use, so you may need to choose high-entropy short passwords vs.
long passphrases (see below for more on passphrases).
Depending on the Linux distribution you decide to use, you may or may not have
to jump through additional hoops in order to import your distribution's
SecureBoot key that would allow you to boot the distro. Many distributions have
partnered with Microsoft to sign their released kernels with a key that is
already recognized by most system manufacturers, therefore saving you the
trouble of having to deal with key importing.
As an extra measure, before someone is allowed to even get to the boot
partition and try some badness there, let's make them enter a password. This
password should be different from your UEFI management password, in order to
prevent shoulder-surfing. If you shut down and start a lot, you may choose to
not bother with this, as you will already have to enter a LUKS passphrase and
this will save you a few extra keystrokes.
## Distro choice considerations
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
Chances are you'll stick with a fairly widely-used distribution such as Fedora,
Ubuntu, Arch, Debian, or one of their close spin-offs. In any case, this is
what you should consider when picking a distribution to use.
2015-08-05 13:44:50 +12:00
### Checklist
2015-08-10 15:25:10 +12:00
2015-08-05 13:44:50 +12:00
- [ ] Has a robust MAC/RBAC implementation (SELinux/AppArmor/PaX) _(CRITICAL)_
- [ ] Publishes security bulletins _(CRITICAL)_
- [ ] Provides timely security patches _(CRITICAL)_
- [ ] Provides cryptographic verification of packages _(CRITICAL)_
- [ ] Fully supports UEFI and SecureBoot _(CRITICAL)_
- [ ] Has robust native full disk encryption support _(CRITICAL)_
2015-08-05 13:44:50 +12:00
### Considerations
2015-08-10 15:25:10 +12:00
2015-08-05 13:44:50 +12:00
#### SELinux, AppArmor, and GrSecurity/PaX
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
Mandatory Access Controls (MAC) or Role-Based Access Controls are an extension
of the basic user/group security mechanism used in legacy POSIX systems. Most
distributions these days either already come bundled with a MAC/RBAC
implementation (Fedora, Ubuntu), or provide a mechanism to add it via an
optional post-installation step (Gentoo, Arch, Debian). Obviously, it is highly
advised that you pick a distribution that comes pre-configured with a MAC/RBAC
system, but if you have strong feelings about a distribution that doesn't come
with one enabled by default, do plan to configure it post-installation.
Distributions that do not provide any MAC/RBAC mechanisms should be strongly
avoided, as traditional POSIX user- and group-based security mechanisms should
be considered insufficient in this day and age. If you would like to start out
with a MAC/RBAC workstation, AppArmor and PaX are generally considered easier
to learn than SELinux. Furthermore, on a workstation, where there are few or no
externally listening daemons, and where user-run applications pose the highest
risk, GrSecurity/PaX will _probably_ offer more security benefits than SELinux.
2015-08-05 13:44:50 +12:00
#### Distro security bulletins
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
Most widely used distributions have a mechanism to deliver security bulletins
to its users, but if you are fond of something esoteric, check whether the
developers have a documented mechanism of alerting the users about security
vulnerabilities and patches. Absence of such mechanism is a major warning sign
that the distribution is not mature enough to be considered for a primary admin
workstation.
2015-08-05 13:44:50 +12:00
#### Timely and trusted security updates
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
Most widely used distributions deliver security updates, but is worth checking
to ensure that critical package updates are provided in a timely fashion. Avoid
using spin-offs and "community rebuilds" for this reason, as they routinely
delay security updates due to having to wait for the upstream distribution to
release it first.
You'll be hard-pressed to find a distribution that does not use cryptographic
signatures on packages, updates metadata, or both. That being said, fairly
widely used distributions have been known to go for years before introducing
this basic security measure (Arch, I'm looking at you), so this is a thing
worth checking.
2015-08-05 13:44:50 +12:00
#### Distros supporing UEFI and SecureBoot
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
Check that the distribution supports UEFI and SecureBoot. Find out whether it
requires importing an extra key or whether it signs its boot kernels with a key
already trusted by systems manufacturers (e.g. via an agreement with
Microsoft). Some distributions do not support UEFI/SecureBoot but offer
alternatives to ensure tamper-proof or tamper-evident boot environments
([Qubes-OS][3] uses Anti Evil Maid, mentioned earlier). If a distribution
doesn't support SecureBoot and has no mechanisms to prevent boot-level attacks,
look elsewhere.
2015-08-05 13:44:50 +12:00
#### Full disk encryption
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
Full disk encryption is a requirement for securing data at rest, and is
supported by most distributions. As an alternative, systems with
self-encrypting hard drives may be used (normally implemented via the on-board
TPM chip) and offer comparable levels of security plus faster operation, but at
a considerably higher cost.
2015-08-05 13:44:50 +12:00
## Distro installation guidelines
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
All distributions are different, but here are general guidelines:
2015-08-05 13:44:50 +12:00
### Checklist
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
- [ ] Use full disk encryption (LUKS) with a robust passphrase _(CRITICAL)_
2015-08-05 13:44:50 +12:00
- [ ] Make sure swap is also encrypted _(CRITICAL)_
2015-08-06 09:13:40 +12:00
- [ ] Require a password to edit bootloader (can be same as LUKS) _(CRITICAL)_
- [ ] Set up a robust root password (can be same as LUKS) _(CRITICAL)_
2015-08-05 13:44:50 +12:00
- [ ] Use an unprivileged account, part of administrators group _(CRITICAL)_
- [ ] Set up a robust user-account password, different from root _(CRITICAL)_
2015-08-05 13:44:50 +12:00
### Considerations
2015-08-10 15:25:10 +12:00
2015-08-05 13:44:50 +12:00
#### Full disk encryption
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
Unless you are using self-encrypting hard drives, it is important to configure
your installer to fully encrypt all the disks that will be used for storing
your data and your system files. It is not sufficient to simply encrypt the
user directory via auto-mounting cryptfs loop files (I'm looking at you,
Ubuntu), as this offers no protection for system binaries or swap, which is
likely to contain a slew of sensitive data. The recommended encryption strategy
is to encrypt the LVM device, so only one passphrase is required during the
boot process.
The `/boot` partition will always remain unencrypted, as the bootloader needs
to be able to actually boot the kernel before invoking LUKS/dm-crypt. The
kernel image itself should be protected against tampering with a cryptographic
signature checked by SecureBoot.
In other words, `/boot` should always be the only unencrypted partition on your
system.
2015-08-05 13:44:50 +12:00
#### Choosing good passphrases
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
Modern Linux systems have no limitation of password/passphrase length, so the
only real limitation is your level of paranoia and your stubbornness. If you
boot your system a lot, you will probably have to type at least two different
passwords: one to unlock LUKS, and another one to log in, so having long
passphrases will probably get old really fast. Pick passphrases that are 2-3
words long, easy to type, and preferably from rich/mixed vocabularies.
2015-08-05 13:44:50 +12:00
Examples of good passphrases (yes, you can use spaces):
2015-08-06 09:13:40 +12:00
- nature abhors roombas
2015-08-05 13:44:50 +12:00
- 12 in-flight Jebediahs
2015-08-06 09:13:40 +12:00
- perdon, tengo flatulence
You can also stick with non-vocabulary passwords that are at least 10-12
characters long, if you prefer that to typing passphrases.
Unless you have concerns about physical security, it is fine to write down your
passphrases and keep them in a safe place away from your work desk.
#### Root, user passwords and the admin group
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
I recommend that you use the same passphrase for your root password as you use
for your LUKS encryption (unless you share your laptop with other trusted
people who should be able to unlock the drives, but shouldn't be able to become
root). If you are the sole user of the laptop, then having your root password
be different from your LUKS password has no meaningful security advantages.
Generally, you can use the same passphrase for your UEFI administration, disk
encryption, and root account -- knowing any of these will give an attacker full
control of your system anyway, so there is little security benefit to have them
be different on a single-user workstation.
You should have a different, but equally strong password for your regular user
account that you will be using for day-to-day tasks. This user should be member
of the admin group (e.g. `wheel` or similar, depending on the distribution),
allowing you to perform `sudo` to elevate privileges.
In other words, if you are the sole user on your workstation, you should have 2
distinct, robust, equally strong passphrases you will need to remember:
**Admin-level**, used in the following locations:
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
- UEFI administration
- Bootloader (GRUB)
- Disk encryption (LUKS)
- Workstation admin (root user)
2015-08-06 09:13:40 +12:00
**User-level**, used for the following:
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
- User account and sudo
- Master password for the password manager
All of them, obviously, can be different if there is a compelling reason.
## Post-installation hardening
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
Post-installation security hardening will depend greatly on your distribution
of choice, so it is futile to provide detailed instructions in a general
document such as this one. However, here are some steps you should take:
### Checklist
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
- [ ] Globally disable firewire and thunderbolt modules _(CRITICAL)_
- [ ] Check your firewalls to ensure all incoming ports are filtered _(CRITICAL)_
- [ ] Make sure root mail is forwarded to an account you check _(CRITICAL)_
- [ ] Check to ensure sshd service is disabled by default _(MODERATE)_
- [ ] Set up an automatic OS update schedule, or update reminders _(MODERATE)_
- [ ] Configure the screensaver to auto-lock after a period of inactivity _(MODERATE)_
- [ ] Set up logwatch _(MODERATE)_
- [ ] Install and use rkhunter _(LOW)_
- [ ] Install an Intrusion Detection System _(PARANOID)_
### Considerations
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
#### Blacklisting modules
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
To blacklist a firewire and thunderbolt modules, add the following lines to a
file in `/etc/modprobe.d/blacklist-dma.conf`:
blacklist firewire-core
blacklist thunderbolt
The modules will be blacklisted upon reboot. It doesn't hurt doing this even if
you don't have these ports (but it doesn't do anything either).
#### Root mail
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
By default, root mail is just saved on the system and tends to never be read.
Make sure you set your `/etc/aliases` to forward root mail to a mailbox that
you actually read, otherwise you may miss important system notifications and
reports:
# Person who should get root's mail
root: bob@example.com
Run `newaliases` after this edit and test it out to make sure that it actually
gets delivered, as some email providers will reject email coming in from
nonexistent or non-routable domain names. If that is the case, you will need to
play with your mail forwarding configuration until this actually works.
#### Firewalls, sshd, and listening daemons
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
The default firewall settings will depend on your distribution, but many of
them will allow incoming `sshd` ports. Unless you have a compelling legitimate
reason to allow incoming ssh, you should filter that out and disable the `sshd`
daemon.
systemctl disable sshd.service
systemctl stop sshd.service
You can always start it temporarily if you need to use it.
In general, your system shouldn't have any listening ports apart from
responding to ping. This will help safeguard you against network-level 0-day
exploits.
#### Automatic updates or notifications
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
It is recommended to turn on automatic updates, unless you have a very good
reason not to do so, such as fear that an automatic update would render your
system unusable (it's happened in the past, so this fear is not unfounded). At
the very least, you should enable automatic notifications of available updates.
Most distributions already have this service automatically running for you, so
chances are you don't have to do anything. Consult your distribution
documentation to find out more.
You should apply all outstanding errata as soon as possible, even if something
isn't specifically labeled as "security update" or has an associated CVE code.
2015-08-10 15:25:10 +12:00
All bugs have the potential of being security bugs and erring on the side of
newer, unknown bugs is _generally_ a safer strategy than sticking with old,
known ones.
2015-08-06 09:13:40 +12:00
#### Watching logs
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
You should have a keen interest in what happens on your system. For this
reason, you should install `logwatch` and configure it to send nightly activity
reports of everything that happens on your system. This won't prevent a
dedicated attacker, but is a good safety-net feature to have in place.
Note, that many systemd distros will no longer automatically install a syslog
server that `logwatch` needs (due to systemd relying on its own journal), so
you will need to install and enable `rsyslog` to make sure your `/var/log` is
not empty before logwatch will be of any use.
#### Rkhunter and IDS
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
Installing `rkhunter` and an intrusion detection system (IDS) like `aide` or
`tripwire` will not be that useful unless you actually understand how they work
and take the necessary steps to set them up properly (such as, keeping the
databases on external media, running checks from a trusted environment,
2015-08-10 15:25:10 +12:00
remembering to refresh the hash databases after performing system updates and
2015-08-06 09:13:40 +12:00
configuration changes, etc). If you are not willing to take these steps and
adjust how you do things on your own workstation, these tools will introduce
hassle without any tangible security benefit.
I do recommend that you install `rkhunter` and run it nightly. It's fairly easy
to learn and use, and though it will not deter a sophisticated attacker, it may
help you catch your own mistakes.
## Personal workstation backups
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
Workstation backups tend to be overlooked or done in a haphazard, often unsafe
manner.
### Checklist
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
- [ ] Set up encrypted workstation backups to external storage _(CRITICAL)_
- [ ] Use zero-knowledge backup tools for cloud backups _(MODERATE)_
### Considerations
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
#### Full encrypted backups to external storage
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
It is handy to have an external hard drive where one can dump full backups
without having to worry about such things like bandwidth and upstream speeds
(in this day and age most providers still offer dramatically asymmetric
upload/download speeds). Needless to say, this hard drive needs to be in itself
encrypted (again, via LUKS), or you should use a backup tool that creates
encrypted backups, such as `duplicity` or its GUI companion, `deja-dup`. I
recommend using the latter with a good randomly generated passphrase, stored in
2015-08-10 15:25:10 +12:00
your password manager. If you travel with your laptop, leave this drive at home
to have something to come back to in case your laptop is lost or stolen.
2015-08-06 09:13:40 +12:00
In addition to your home directory, you should also back up `/etc` and
`/var/log` for various forensic purposes.
2015-08-10 15:25:10 +12:00
Above all, avoid copying your home directory onto any unencrypted storage, even
as a quick way to move your files around between systems, as you will most
certainly forget to erase it once you're done, exposing potentially private or
otherwise security sensitive data to snooping hands -- especially if you keep
that storage media in the same bag with your laptop.
2015-08-06 09:13:40 +12:00
#### Selective zero-knowledge backups off-site
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
Off-site backups are also extremely important and can be done either to your
employer, if they offer space for it, or to a cloud provider. You can set up a
separate duplicity/deja-dup profile to only include most important files in
order to avoid transferring huge amounts of data that you don't really care to
back up off-site (internet cache, music, downloads, etc).
Alternatively, you can use a zero-knowledge backup tool, such as
[SpiderOak][5], which offers an excellent Linux GUI tool and has additional
useful features such as synchronizing content between multiple systems and
platforms.
## Best practices
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
What follows is a curated list of best practices that we think you should
2015-08-10 15:25:10 +12:00
adopt. It is most certainly non-exhaustive, but rather attempts to offer
practical advice that strikes a workable balance between security and overall
usability.
2015-08-06 09:13:40 +12:00
### Browsing
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
There is no question that the web browser will be the piece of software with
the largest and the most exposed attack surface on your system. It is a tool
written specifically to download and execute untrusted, frequently hostile
2015-08-10 15:25:10 +12:00
code. It attempts to shield you from this danger by employing multiple
mechanisms such as sandboxes and code sanitization, but they have all been
previously defeated on multiple occasions. You should learn to approach
browsing websites as the most insecure activity you'll engage in on any given
day.
2015-08-06 09:13:40 +12:00
There are several ways you can reduce the impact of a compromised browser, but
the truly effective ways will require significant changes in the way you
operate your workstation.
#### 1: Use two different browsers
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
This is the easiest to do, but only offers minor security benefits. Not all
browser compromises give an attacker full unfettered access to your system --
sometimes they are limited to allowing one to read local browser storage,
steal active sessions from other tabs, capture input entered into the browser,
etc. Using two different browsers, one for work/high security sites, and
another for everything else will help prevent minor compromises from giving
2015-08-10 15:25:10 +12:00
attackers access to the whole proverbial cookie jar. The main inconvenience
will be the amount of memory consumed by two different browser processes.
2015-08-06 09:13:40 +12:00
Here's what we recommend:
##### Firefox for work and high security sites
2015-08-10 15:25:10 +12:00
Use Firefox to access work-related sites, where extra care should be taken to
2015-08-06 09:13:40 +12:00
ensure that data like cookies, sessions, login information, keystrokes, etc,
2015-08-10 15:25:10 +12:00
should most definitely not fall into attackers' hands. You should NOT use
2015-08-06 09:13:40 +12:00
this browser for accessing any other sites except select few.
You should install the following Firefox add-ons:
- [ ] NoScript _(CRITICAL)_
- NoScript prevents active content from loading, unless specifically
2015-08-10 15:25:10 +12:00
whitelisted. It is a great hassle to use with your default browser
2015-08-06 09:13:40 +12:00
(though offers really good security benefits), so we recommend only
enabling it on the browser you use to access work-related sites.
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
- [ ] Ghostery _(CRITICAL)_
- Ghostery will prevent most external trackers and ad platforms from being
2015-08-10 15:25:10 +12:00
loaded on the pages, which will help avoid compromises on these tracking
2015-08-06 09:13:40 +12:00
sites from affecting your browser (trackers and ad sites are very commonly
2015-08-10 15:25:10 +12:00
targeted by attackers, as they allow rapid infection of thousands of systems
2015-08-06 09:13:40 +12:00
worldwide).
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
- [ ] HTTPS Everywhere _(CRITICAL)_
2015-08-10 15:25:10 +12:00
- This EFF-developed Add-on will ensure that most of your sites are accessed
2015-08-06 09:13:40 +12:00
over a secure connection, even if a link you click is using http:// (great
2015-08-10 15:25:10 +12:00
to avoid a number of attacks, such as [SSL-strip][7]).
2015-08-06 09:13:40 +12:00
- [ ] Certificate Patrol _(MODERATE)_
- This tool will alert you if the site you're accessing has recently changed
2015-08-10 15:25:10 +12:00
their TLS certificates -- especially if it wasn't nearing expiration dates
2015-08-06 09:13:40 +12:00
or if it is now using a different certification authority. Note, that this
will generate a lot of false-positives.
You should leave Firefox as your default browser for opening links, as
NoScript will prevent most active content from loading or executing.
##### Chrome/Chromium for everything else
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
Chromium developers are ahead of Firefox in adding a lot of nice security
features (at least [on Linux][6]), such as seccomp sandboxes, kernel user
namespaces, etc, which act as an added layer of isolation between the sites
you visit and the rest of your system. Chromium is the upstream open-source
project, and Chrome is Google's proprietary binary build based on it (insert
the usual paranoid caution about not using it for anything you don't want
Google to know about).
2015-08-10 15:25:10 +12:00
It is recommended that you install **Ghostery** and **HTTPS Everywhere**
extensions in Chrome as well and give it a distinct theme from Firefox to
indicate that this is your "untrusted sites" browser.
2015-08-06 09:13:40 +12:00
#### 2: Use two different browsers, one inside a dedicated VM
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
This is a similar recommendation to the above, except you will add an extra
step of running Chrome inside a dedicated VM that you access via a fast
protocol that allows you to share clipboards and forwards sound events (e.g.
Spice or RDP). This will add an excellent layer of isolation between the
untrusted browser and the rest of your work environment, ensuring that
2015-08-10 15:25:10 +12:00
attackers who manage to fully compromise your browser will then have to then
break out of the VM isolation layer in order to get to the rest of your
system.
2015-08-06 09:13:40 +12:00
This is a surprisingly workable configuration, but requires a lot of RAM and
fast processors that can handle the increased load. It will also require an
important amount of dedication on the part of the admin who will need to
adjust their work practices accordingly.
#### 3: Fully separate your work and play environments via virtualization
2015-08-10 15:25:10 +12:00
2015-08-06 09:13:40 +12:00
See [Qubes-OS project][3], which strives to provide a high-security
workstation environment via compartmentalizing your applications into separate
fully isolated VMs.
### Password managers
2015-08-11 09:54:04 +12:00
#### Checklist
- [ ] Use a password manager _(CRITICAL_)
- [ ] Use unique passwords on unrelated sites _(CRITICAL)_
- [ ] Use a password manager that supports team sharing _(MODERATE)_
- [ ] Use a separate password manager for non-website accounts _(PARANOID)_
2015-08-11 13:46:19 +12:00
#### Considerations
2015-08-11 09:54:04 +12:00
Using good, unique passwords should be a critical requirement for every member
of your team. Credential theft is happening all the time -- either via
compromised computers, stolen database dumps, remote site exploits, or any
number of other means. No credentials should ever be reused across sites,
especially for critical applications.
2015-08-11 13:46:19 +12:00
##### In-browser password manager
2015-08-11 09:54:04 +12:00
Every browser has a mechanism for saving passwords that is fairly secure and
can sync with vendor-provided cloud storage by first encrypting the data with
a passphrase. However, this mechanism has important disadvantages:
1. It does not work across browsers
2. It does not offer any way of sharing credentials with team members
There are several well-supported, free-or-cheap password managers that are
well-integrated into multiple browsers, work across platforms, and offer
group sharing (usually as a paid service). Solutions can be easily found via
search engines.
2015-08-11 13:46:19 +12:00
##### Standalone password manager
2015-08-11 09:54:04 +12:00
One of the major drawbacks of any password manager that is integrated with
the browser is the fact that it's part of the application that is most likely
to be attacked by intruders. If this makes you uncomfortable (and it should),
you may choose to have two different password managers -- one for websites
that is integrated into your browser, and one as a standalone application. The
latter can be used to store high-risk credentials such as root passwords,
database passwords, other shell account credentials, etc.
It may be particularly useful to have such tool for sharing superuser account
credentials with other members of your team. The best is, obviously, not to
have shared account credentials at all and manage superuser access via
role-based tools such as sudo and group membership. However, not all
systems are easily managed that way, so having a way to securely pass account
credentials to other members of your team may be very handy.
A few tools can help you:
- [KeePassX][8], which improves team sharing in version 2
- [Pass][9], which uses text files and PGP and integrates with git
- [Django-Pstore][10], which uses GPG to share credentials between admins
- [Hiera-Eyaml][11], if you are already using Puppet for your infrastructure,
this may be a handy way to track your server/service credentials as part of
your encrypted Hiera data store
### Securing SSH and PGP private keys
2015-08-11 13:46:19 +12:00
Personal encryption keys, including SSH and PGP private keys, are going to be
the most prized items on your workstation -- something the attackers will be
most interested in obtaining, as that would allow them to further attack your
infrastructure or impersonate you to other admins. You should take extra steps
to ensure that they are well protected against theft.
#### Checklist
- [ ] Strong passphrases are used to protect private keys _(CRITICAL)_
- [ ] PGP Master key is stored on removable storage _(MODERATE)_
- [ ] Auth, Sign and Encrypt Subkeys are stored on a smartcard device _(MODERATE)_
- [ ] SSH is configured to use PGP Auth key as ssh private key _(MODERATE)_
#### Considerations
The best way to prevent private key theft is to use a smartcard to store your
encryption private keys and never copy them onto the workstation. There are
several manufacturers that offer OpenPGP capable devices:
- [Kernel Concepts][12], where you can purchase both the OpenPGP compatible
smartcards and the USB readers, should you need one.
- [Yubikey NEO][13], which offers OpenPGP smartcard functionality in addition
to other features.
It is also important to make sure that the master PGP key is not stored on the
main workstation, and only subkeys are used. The master key will only be
needed when signing someone else's keys or creating new subkeys -- operations
which do not happen very frequently. You may follow [the Debian's subkeys][14]
guide to learn how to move your master key to removable storage.
You should then configure your gnupg agent to act as ssh agent and use the
smartcard-based PGP Auth key to act as your ssh private key. We publish a
[detailed guide][15] on how to do that using either a smartcard reader or
Yubikey NEO.
If you are not willing to go that far, at least make sure you have a strong
passphrase on both your PGP private key and your SSH private key, which will
make it harder for attackers to steal and use them.
2015-08-06 09:13:40 +12:00
### SELinux on the workstation
2015-08-10 15:25:10 +12:00
2015-08-11 13:46:19 +12:00
If you are using a distribution that comes bundled with SELinux (such as
Fedora), here are some recommendation of how to make the best use of it to
maximize your workstation security.
#### Checklist
- [ ] Make sure SELinux is enforcing on your workstation _(CRITICAL)_
- [ ] Never blindly run `audit2allow -M`, always check _(CRITICAL)_
- [ ] Never `setenforce 0` _(MODERATE)_
- [ ] Switch your account to SELinux user `staff_u` _(MODERATE)_
#### Considerations
SELinux is a Mandatory Access Controls (MAC) extension to core POSIX
permissions functionality. It is mature, robust, and has come a long way since
its initial roll-out, but most people to this day repeat the outdated mantra
of "just turn it off."
That being said, SELinux will have limited security benefits on the
workstation, as most applications you will be running as a user are going to
be running unconfined. It does provide enough net benefit to warrant leaving
it on, as it will likely help prevent an attacker from escalating privileges
to gain root-level access via a vulnerable daemon service.
##### Never `setenforce 0`
It's tempting to use `setenforce 0` to flip SELinux into permissive mode
on a temporary basis, but you should avoid doing that. This essentially turns
off SELinux for the entire system, while what you really want is to
troubleshoot a particular application or daemon.
Instead of `setenforce 0` you should be using `semanage permissive -a
somedomain_t` to put only that domain into permissive mode. First, find out
which domain is causing troubles by running `ausearch`:
ausearch -ts recent -m avc
and then look for `scontext=` line, like so:
2015-08-11 13:46:19 +12:00
scontext=staff_u:staff_r:gpg_pinentry_t:s0-s0:c0.c1023
This tells you that the domain being denied is `gpg_pinentry_t`, so if you
want to troubleshoot the application, you should add it to permissive domains:
semange permissive -a gpg_pinentry_t
This will allow you to use the application and collect the rest of the AVCs,
which you can then use in conjunction with `audit2allow`.
##### Use your workstation as SELinux role staff_r
SELinux comes with a concept of roles, which will prohibit or grant certain
privileges based on the role associated with the user account. As an
administrator, you should be using the `staff_r` role, which will restrict
access to many configuration and hardware directories, unless you first
perform `sudo`.
By default, accounts are created as `unconfined_r`, which will run most
applications you execute without any SELinux constraints. To switch your
account to the `staff_r` role, run the following command:
usermod -Z staff_u [username]
You should log out and log back in to enable the new role, at which point if
you run `id -Z`, you'll see:
staff_u:staff_r:staff_t:s0-s0:c0.c1023
When performing `sudo`, you should remember to add an extra flag to tell
SELinux to transition to the "sysadmin" role. The command you want is:
sudo -i -r sysadm_r
At which point `id -Z` will show:
staff_u:sysadm_r:sysadm_t:s0-s0:c0.c1023
**WARNING**: you should be comfortable using `ausearch` and `audit2allow`
before you make this switch, as it's possible some of your applications will
no longer work when you're running as role `staff_r`. At the time of writing,
the following popular applications are known to not work under `staff_r`
without policy tweaks:
- Chrome/Chromium
- Skype
- VirtualBox
To switch back to `unconfined_r`, run the following command:
usermod -Z unconfined_u [username]
and then log out and back in to get back into the comfort zone.
## License
This work is licensed under a
[Creative Commons Attribution-ShareAlike 4.0 International License][0].
[0]: http://creativecommons.org/licenses/by-sa/4.0/
2015-08-05 13:44:50 +12:00
[1]: https://github.com/QubesOS/qubes-antievilmaid
[2]: https://en.wikipedia.org/wiki/IEEE_1394#Security_issues
2015-08-06 09:13:40 +12:00
[3]: https://qubes-os.org/
[4]: https://xkcd.com/936/
[5]: https://spideroak.com/
[6]: https://code.google.com/p/chromium/wiki/LinuxSandboxing
2015-08-10 15:25:10 +12:00
[7]: http://www.thoughtcrime.org/software/sslstrip/
2015-08-11 09:54:04 +12:00
[8]: https://keepassx.org/
[9]: http://www.passwordstore.org/
[10]: https://pypi.python.org/pypi/django-pstore
[11]: https://github.com/TomPoulton/hiera-eyaml
2015-08-11 13:46:19 +12:00
[12]: http://shop.kernelconcepts.de/
[13]: https://www.yubico.com/products/yubikey-hardware/yubikey-neo/
[14]: https://wiki.debian.org/Subkeys
[15]: https://github.com/lfit/ssh-gpg-smartcard-config