All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony Liguori <aliguori@us.ibm.com>
To: Paul Moore <pmoore@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH v4] vnc: disable VNC password authentication (security type 2) when in FIPS mode
Date: Tue, 31 Jul 2012 14:52:07 -0500	[thread overview]
Message-ID: <87ehnr7lp4.fsf@codemonkey.ws> (raw)
In-Reply-To: <6590893.1xqK9cpKEY@sifl>

Paul Moore <pmoore@redhat.com> writes:

> On Friday, June 08, 2012 05:38:12 PM Paul Moore wrote:
>> FIPS 140-2 requires disabling certain ciphers, including DES, which is used
>> by VNC to obscure passwords when they are sent over the network.  The
>> solution for FIPS users is to disable the use of VNC password auth when the
>> host system is operating in FIPS mode.
>> 
>> This patch causes QEMU to emit a message to stderr when the host system is
>> running in FIPS mode and a VNC password was specified on the commend line.
>> If the system is not running in FIPS mode, or is running in FIPS mode but
>> VNC password authentication was not requested, QEMU operates normally.
>> 
>> Signed-off-by: Paul Moore <pmoore@redhat.com>
>
> Hi Anthony,
>
> Any word on this patch?  Other than Daniel Berrange's reviewed-by tag, the 
> discussion of the v4 patch has been quiet and I think we addressed all the 
> other remaining issues in the discussion attached to the v2 patch
> posting.

I asked for the specific language in FIPS mandating this.  I don't see
any other VNC server implementing a check like this.  I would rather do
this in a more user friendly fashion like make it a config file option
that a user can set while in fips mode.

Regards,

Anthony Liguori

>
> -Paul
>
>> --
>> Changelog
>> * v4
>> - Removed the use of syslog
>> * v3
>> - Use fgetc() instead of fgets() in fips_enabled
>> - Only emit a syslog message if the caller tries to use VNC password auth
>> - Suggest alternative auth methods in the stderr notice
>> * v2
>> - Protected syslog with _WIN32
>> - Protected the guts of fips_enabled() with __linux__
>> - Converted fips_enabled() and the fips flag from int to bool
>> *v1
>> - Initial draft
>> ---
>>  qemu-doc.texi |    8 +++++---
>>  ui/vnc.c      |   27 +++++++++++++++++++++++++++
>>  ui/vnc.h      |    1 +
>>  3 files changed, 33 insertions(+), 3 deletions(-)
>> 
>> diff --git a/qemu-doc.texi b/qemu-doc.texi
>> index 0af0ff4..fe8d3df 100644
>> --- a/qemu-doc.texi
>> +++ b/qemu-doc.texi
>> @@ -1124,9 +1124,11 @@ the protocol limits passwords to 8 characters it
>> should not be considered to provide high security. The password can be
>> fairly easily brute-forced by a client making repeat connections. For this
>> reason, a VNC server using password authentication should be restricted to
>> only listen on the loopback interface -or UNIX domain sockets. Password
>> authentication is requested with the @code{password} -option, and then once
>> QEMU is running the password is set with the monitor. Until -the monitor is
>> used to set the password all clients will be rejected. +or UNIX domain
>> sockets. Password authentication is not supported when operating +in FIPS
>> 140-2 compliance mode as it requires the use of the DES cipher. Password
>> +authentication is requested with the @code{password} option, and then once
>> QEMU +is running the password is set with the monitor. Until the monitor is
>> used to +set the password all clients will be rejected.
>> 
>>  @example
>>  qemu-system-i386 [...OPTIONS...] -vnc :1,password -monitor stdio
>> diff --git a/ui/vnc.c b/ui/vnc.c
>> index 54bc5ad..4bd816d 100644
>> --- a/ui/vnc.c
>> +++ b/ui/vnc.c
>> @@ -48,6 +48,21 @@ static DisplayChangeListener *dcl;
>>  static int vnc_cursor_define(VncState *vs);
>>  static void vnc_release_modifiers(VncState *vs);
>> 
>> +static bool fips_enabled(void)
>> +{
>> +    bool enabled = false;
>> +
>> +#ifdef __linux__
>> +    FILE *fds = fopen("/proc/sys/crypto/fips_enabled", "r");
>> +    if (fds != NULL) {
>> +        enabled = (fgetc(fds) == '1');
>> +        fclose(fds);
>> +    }
>> +#endif /* __linux__ */
>> +
>> +    return enabled;
>> +}
>> +
>>  static void vnc_set_share_mode(VncState *vs, VncShareMode mode)
>>  {
>>  #ifdef _VNC_DEBUG
>> @@ -2748,6 +2763,9 @@ void vnc_display_init(DisplayState *ds)
>>      dcl->idle = 1;
>>      vnc_display = vs;
>> 
>> +    vs->fips = fips_enabled();
>> +    VNC_DEBUG("FIPS mode %s\n", (vs->fips ? "enabled" : "disabled"));
>> +
>>      vs->lsock = -1;
>> 
>>      vs->ds = ds;
>> @@ -2896,6 +2914,15 @@ int vnc_display_open(DisplayState *ds, const char
>> *display) while ((options = strchr(options, ','))) {
>>          options++;
>>          if (strncmp(options, "password", 8) == 0) {
>> +            if (vs->fips) {
>> +                fprintf(stderr,
>> +                        "VNC password auth disabled due to FIPS mode, "
>> +                        "consider using the VeNCrypt or SASL authentication
>> " +                        "methods as an alternative\n");
>> +                g_free(vs->display);
>> +                vs->display = NULL;
>> +                return -1;
>> +            }
>>              password = 1; /* Require password auth */
>>          } else if (strncmp(options, "reverse", 7) == 0) {
>>              reverse = 1;
>> diff --git a/ui/vnc.h b/ui/vnc.h
>> index a851ebd..d41631b 100644
>> --- a/ui/vnc.h
>> +++ b/ui/vnc.h
>> @@ -160,6 +160,7 @@ struct VncDisplay
>>      char *display;
>>      char *password;
>>      time_t expires;
>> +    bool fips;
>>      int auth;
>>      bool lossy;
>>      bool non_adaptive;
> -- 
> paul moore
> security and virtualization @ redhat

  reply	other threads:[~2012-07-31 19:52 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-08 21:38 [Qemu-devel] [PATCH v4] vnc: disable VNC password authentication (security type 2) when in FIPS mode Paul Moore
2012-06-11  9:37 ` Daniel P. Berrange
2012-07-31 17:08 ` Paul Moore
2012-07-31 19:52   ` Anthony Liguori [this message]
2012-07-31 20:12     ` Daniel P. Berrange
2012-07-31 20:28       ` Paul Moore
2012-07-31 20:52       ` Anthony Liguori

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87ehnr7lp4.fsf@codemonkey.ws \
    --to=aliguori@us.ibm.com \
    --cc=pmoore@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.