[Nut-upsdev] Client certificates

Arjen de Korte nut+devel at de-korte.org
Wed Jan 12 08:59:04 UTC 2011


Citeren EmilienKia op Eaton.com:

> I have added client certificate checking mainly to avoid  
> man-in-the-middle attacks or identity usurpation.

A man-in-the-middle attack is impossible if you verify the server  
certificate (CERTVERIFY 1). If someone manages to stage a  
man-in-the-middle attack by providing a certificate that is trusted by  
your clients CA store, you have bigger worries than this.

> Indeed If you just have server authentication (like 99% the web  
> where just the sertver auth is required), you are just sure of the  
> server's identity, but not the client's one.

That's why we have users defined in 'upsd.users'. Generally speaking,  
we want to grant/limit access to a role/person (user/password) rather  
than a machine (client).

> If you do not want that a vilain execute vicious commands (if it has  
> the login/password), the server must be sure of the client's identity.

I see no difference here. You're using the same file (upsmon.conf) to  
store the existing user/password mechanism and the information to use  
a client certificate. If someone unauthorized is able to read this  
file, you're toast either way, so the client certificate is not adding  
to the security here.

In general, you should have at least three different users defined in  
upsd.users:

     upsslave - only able to read status information from the server
     upsmaster - same as the above, but can also initiate a FSD
     admin - can issue instant commands and change settings

The admin account should *never* be used in 'upsmon.conf' and only be  
used by operators for changing settings or initiating instant  
commands. Practically they should use a secure shell to connect to the  
upsd server and issue the commands there. So most of the time, you'll  
want to limit access to this account to the localhost interface only  
(maybe additionally the webserver too, if you use that for remote  
administration).

> Moreover, note that the password is exchenaged uncrypted or unhashed  
> (do not take in account the SSL tunnel) so nothing can prevent a  
> manè-in-the-middle attack because the server can not detect it  
> speaks to a vilain (or a client via a vilain) and not directly to  
> the real client.

If you can't trust your network (which in the vast majority of the  
cases is not the case, because it will be internal), use SSL  
encryption. It is then the responsibility of the client to not sent  
username/password if it can't verify the server certificate (which is  
the case in upsmon already).

Generally speaking a client will be aware that it is talking to the  
server over an untrusted network (for instance, an operator monitoring  
a UPS in a remote location). In that case, 'CERTVERIFY 1' will make  
sure the user/password information remains secure.

Also note that the amount of mischief a upsmon client can do, is  
limited to initiating a FSD if it is in master mode only. Changing  
settings and initiating instant commands is limited to the upsrw and  
upscmd tools respectively, which don't use encryption at all. This  
means that these can only be run securely on the remote system itself  
(for instance in a ssh).

I'm still not convinced that client certificates are needed/useful for upsmon.

Best regards, Arjen
-- 
Please keep list traffic on the list (off-list replies will be rejected)




More information about the Nut-upsdev mailing list