mirror of https://github.com/BOINC/boinc.git
166 lines
5.7 KiB
HTML
166 lines
5.7 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
|
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
|
|
<html lang="en">
|
|
<head>
|
|
<title>Security</title>
|
|
<meta name="generator" content="BBEdit 6.1.2">
|
|
</head>
|
|
<body bgcolor="#FFFFFF">
|
|
<h2>Security</h2>
|
|
<p>
|
|
Many types of attacks are possible in public-participation
|
|
distributed computing.
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
<b>Result falsification</b>. Attackers return incorrect results.
|
|
</li>
|
|
<li>
|
|
<b>Credit falsification</b>. Attackers return results claiming
|
|
more CPU time than was actually used.
|
|
</li>
|
|
<li>
|
|
<b>Malicious executable distribution</b>. Attackers break into a
|
|
BOINC server and, by modifying the database and files, attempt to
|
|
distribute their own executable (e.g. a virus program) disguised as a
|
|
BOINC application.
|
|
</li>
|
|
<li>
|
|
<b>Overrun of data server</b>. Attackers repeatedly send large
|
|
files to BOINC data servers, filling up their disks and rendering them
|
|
unusable.
|
|
</li>
|
|
<li>
|
|
<b>Theft of participant account information by server
|
|
attack</b>. Attackers break into a BOINC server and steal email
|
|
addresses and other account information.
|
|
</li>
|
|
<li>
|
|
<b>Theft of participant account information by network
|
|
attack</b>. Attackers exploit the BOINC network protocols to steal
|
|
account information.
|
|
</li>
|
|
<li>
|
|
<b>Theft of project files</b>. Attackers steal input and/or
|
|
output files.
|
|
</li>
|
|
<li>
|
|
<b>Intentional abuse of participant hosts by projects</b>. A
|
|
project intentionally releases an application that abuses participant
|
|
hosts, e.g. by stealing sensitive information stored in files.
|
|
</li>
|
|
<li>
|
|
<b>Accidental abuse of participant hosts by projects</b>. A
|
|
project releases an application that unintentionally abuses particpant
|
|
hosts, e.g. deleting files or causing crashes.
|
|
</li>
|
|
</ul>
|
|
BOINC provides mechanisms to reduce the likelihood of some of these
|
|
attacks.
|
|
<p>
|
|
<b>Result falsification</b>
|
|
</p>
|
|
<p>
|
|
This can be probabilistically detected using redundant computing and
|
|
result verification: if a majority of results agree (according to an
|
|
application-specific comparison) then they are classified as correct.
|
|
Also, ringers or similar schemes can be used to prevent cheating. For
|
|
information about ringers see the paper "Uncheatable Distributed
|
|
Computations" by Philippe Golle and Ilya Mironov.
|
|
</p>
|
|
<p>
|
|
<b>Credit falsification</b>
|
|
</p>
|
|
<p>
|
|
This can be probabilistically detected using redundant computing and
|
|
credit verification: each participant is given the minimum credit from
|
|
among the correct results.
|
|
</p>
|
|
<p>
|
|
<b>Malicious executable distribution</b>
|
|
</p>
|
|
<p>
|
|
BOINC uses code signing to prevent this. Each project has a key pair
|
|
for code signing. The private key should be kept on a network-isolated
|
|
machine used for generating digital signatures for executables. The
|
|
public key is distributed to, and stored on, clients. All files
|
|
associated with application versions are sent with digital signatures
|
|
using this key pair.
|
|
</p>
|
|
<p>
|
|
Even if attackers break into a project's BOINC servers, they will
|
|
not be able to cause clients to accept a false code file.
|
|
</p>
|
|
<p>
|
|
BOINC provides a mechanism by which projects can periodically change
|
|
their code-signing key pair. The project generates a new key pair, then
|
|
(using the code-signing machine) generates a signature for the new
|
|
public key, signed with the old private key. The core client will accept
|
|
a new key only if it's signed with the old key. This mechanism is
|
|
designed to prevent attackers from breaking into a BOINC server and
|
|
distributing a false key pair.
|
|
</p>
|
|
<p>
|
|
<b>Overrun of data server</b>
|
|
</p>
|
|
<p>
|
|
Each result file has an associated maximum size. Each project has a
|
|
<b>upload authentication key pair</b>. The public key is stored on the
|
|
project's data servers. Result file descriptions are sent to clients
|
|
with a digital signature, which is forwarded to the data server when the
|
|
file is uploaded. The data server verifies the file description, and
|
|
ensures that the amount of data uploaded does not exceed the maximum
|
|
size.
|
|
</p>
|
|
<p>
|
|
<b>Theft of participant account information by server attack</b>
|
|
</p>
|
|
<p>
|
|
Each project must address this using conventional security
|
|
practices. All server machines should be protected by a firewall, and
|
|
should have all unused network services disabled. Access to these
|
|
machines should be done only with encrypted protocols like SSH. The
|
|
machines should be subjected to regular security audits.
|
|
</p>
|
|
<p>
|
|
Projects should be undertaken only the organizations that have
|
|
sufficient expertise and resources to secure their servers. A successful
|
|
attack could discredit all BOINC-based projects, and
|
|
public-participation computing in general.
|
|
</p>
|
|
<p>
|
|
<b>Theft of participant account information by network attack</b>
|
|
</p>
|
|
<p>
|
|
The
|
|
</p>
|
|
<p>
|
|
<b>Theft of project files</b>
|
|
</p>
|
|
<p>
|
|
The input and output files used by BOINC applications are not
|
|
encrypted. Applications can do this themselves, but it has little effect
|
|
since data resides in cleartext in memory, where it is easy to access
|
|
with a debugger.
|
|
</p>
|
|
<p>
|
|
<b>Intentional abuse of participant hosts by projects</b>
|
|
</p>
|
|
<p>
|
|
BOINC does nothing to prevent this (e.g. there is no "sandboxing" of
|
|
applications). Participants must understand that when they join a BOINC
|
|
project, they are entrusting the security of their systems to that
|
|
project.
|
|
</p>
|
|
<p>
|
|
<b>Accidental abuse of participant hosts by projects</b>
|
|
</p>
|
|
<p>
|
|
BOINC does nothing to prevent this. The chances of it happening can
|
|
be minimized by pre-released application testing. Projects should test
|
|
their applications thoroughly on all platforms and with all input data
|
|
scenarios before promoting them to production status.
|
|
</p>
|
|
</body>
|
|
</html>
|