[Rets-dev] Username/Password and security policies
Stuart Schuessler
sschuessler at tds.net
Mon Mar 12 19:03:13 CDT 2007
Your email is pretty good. You should post it as a white paper. I would
recommend that Metadata control be done with the user-agent in combination
with the client authentication. User-agent is too easy to fake.
Also, the available RETS calls can be managed from the login screen. The
login screen should report the proper metadata version for the user-agent.
You would not want to have various versions of metadata have the same
version number.
There are other aspects of security such as managing size of download, time
of download, field level data such as expiration date. There are a large
number of security related items such as this that needs to be considered.
Stuart
-----Original Message-----
From: rets-dev-bounces at rets.org [mailto:rets-dev-bounces at rets.org] On Behalf
Of Paul Stusiak
Sent: Monday, March 12, 2007 7:40 PM
To: Colby Ackerfield
Cc: rets-dev at rets.org
Subject: Re: [Rets-dev] Username/Password and security policies
Colby, I'm not sure that your question was answered by the email thread
over the weekend.
I believe that your statement of best practices is not accurately
describing the model that RETS 1.x has implemented.
I think that there at least two models that can be applied to a security
system (there may be others but I will only talk about two of them). The
first is as you describe, where all control is through the central
location. PayPal has users log in via their website, but generally, and
I'm not claiming to be an expert on all aspects of PayPal, the user does
whatever the PayPal related event is, within the PayPal system. Any
client may connect to the system without restriction - all restrictions
are applied at the transaction level on the back-end server, in your
example, PayPal. Any IP address may attempt to connect to the system.
So, in this case, the restriction that all login events occur within the
browser environment at a URL within the PayPal domain is a reasonable
restriction.
The second case is a delegation of responsibility to certain selected
clients who are permitted to attempt to authenticate against the server.
RETS implements a model like this. It also helps to explain the Client
Authentication piece as well as the meat of the discussion on this
thread over the weekend. RETS 1 has a light hand on the security model -
greater flexibility was permitted to allow for more scenarios to be
implemented. The Client Authentication was added to strengthen security
around the threat that a malicious client may easily masquerade as a
valid application. There are a couple of possible scenarios for
connecting to a RETS server. The first is a 'thick' client - it does not
run inside a browser, but has its own execution environment, for example
a desktop application. In this case, the user will enter their password
into a dialog box in the application and will connect to the fixed
(properties file hopefully) URL for your server and will use the
embedded client authentication information to connect. In a second
scenario, the client runs inside a browser that talks to a system
operated by the client vendor. This system may maintain information
about the application for the user and will initiate the connection back
to the MLS server. The client enters their credentials into the browser
application hosted by the client vendor, transmits it to the client
vendor system that adds the Client Authentication piece and connects to
the MLS system. RETS does not say anything about the client system
holding the username/password on that system. The client vendor may
choose to provide a separate username/password for their system and hold
the MLS information separate. I certainly would agree that this is not a
best-practice. This is not a RETS issue. RETS does not dictate how a
user implements a RETS system. You could enforce a security policy that
clients to your system must not hold the username/password to your
system in any repository, but RETS does say that the scenario where the
client system acts as a proxy is valid.
In the first case, the client system will alway look like it is
connecting directly to your system. In the second case, the client will
be isolated from your system through a well-known IP address(es) that
you should be able to monitor.
It sounds like your policy should be modified to inform your users that
they should only log in to clients of your system from the appropriate
client system URL. You should consider implementing into your contracts
the limitations that client applications have to meet certain criteria -
this is very common across the industry. You should consider how you
will enforce the contractual rules that you describe and what the
remedies are (things like disconnecting offending client systems,
penalties for excessive use, right to audit, pass-through of passwords
etc.). You should modify your system code to log connections to your
system and be able to deny access to client systems that do not
implement your policies. You should consider writing into the contract
that clients who proxy your system are initiated from known addresses.
You should consider modifying your system code to be able to deny
certain applications access if they are coming from unregistered locations.
To reply to your options, I have the following observations:
1. If the user is a non-Agent, this is perfectly reasonable. Limiting
the access to what the application is permitted to see is a good idea.
For example, if the application is a newspaper advertising pull tool,
then they should only get what the contract says they should see. If the
user is an Agent, as pointed out in the thread this weekend, you will
have some troubles. If the user is acting as an Agent proxy, you should
be able to use the combination of the user and the UserAgent to limit
the access to information however, having a different username/password
could be a problem.
2. You should consult third-party vendors about this. There are a couple
working in this space who could help you. This is a non-trivial
implementation.
3. The single vendor log in does not provide a very fine-grained logging
capability for use tracking. I assume that you apply limits on what a
vendor can see, you are basically allowing them complete access to all
members on the system. It is better to limit the access to a vendor to
the specific agent that they are supporting - yes, I know that there are
valid applications that span the system, I'm only focusing on
agent-centered applications here. See (1.) for a way to limit the access
to cross-cutting applications. However, it is my understanding that some
vendors use this to provide third party access.
RETS does not specify that you need to implement any security, only that
a Login transaction be executed. There is an inference that weak
security is a special case and a strong recommendation to use digest
authentication. Properly implemented RFC2617 should provide a reasonable
level of authentication security when both username and UserAgent
authentication are implemented. This includes keeping both the password
associated with the username secure and the password associated with the
UserAgent secure. Secure means, to me in this case, that the passwords
are not stored in plain text anywhere, that digest authentication be
used where appropriate, including the changing of the hash salt values
(nonce). Basic Authentication with SSL is also a viable alternative, but
is used in only one case that I am aware of.
To summarize, many vendors use the username and UserAgent along with
digest authentication and policy controls to manage the issue. Metadata
may be modified based on who is asking for information and which
application they are using. Requests are managed and logged to ensure
that the business policies are enforced. Responses may have data masked
or columns eliminated based on internal rules. Connecting clients are
constrained to those that have a pre-existing contractual relationship
with the server vendor. Part of this is business policy and part of this
is using the existing RETS facilities like the UserAgent. While not
perfect, it should, combined with proper IT policies and procedures,
permit you to control the access and to protect the user's account with you.
Paul
Colby Ackerfield wrote:
> Our MLS security policies attempt to adopt best practices that will
> protect our user's accounts by not requiring them to ever provide
> their password to a site other than the MLS. That is, users should
> never type in their password if the url isn't our MLS' url. This is
> similar to the anti-phishing education that Paypal and many other
> sites promote.
>
> The problem we've encountered is that many RETS enabled clients will
> prompt users for this information. Many of these products are provided
> via an application service model so these passwords are transmitted
> and stored on a third part systems which will likely have different
> security policies from our own. We'd like to avoid changing our
> security policies to accommodate RETS integrations.
>
> Some of the options we have considered, or use, include:
>
> - Providing users with a limited access RETS username and password
> that can't be used for the general purpose MLS
> - Alternative authentication mechanisms utilizing some type of
> one-time passwords
> - Providing a single vendor account that the client vendor can use on
> behalf of our MLS users (most common approach for us)
>
> I'm wondering how other RETS servers and clients have dealt with this
> issue.
>
> Thanks,
> Colby Ackerfield
> RealGo, Inc.
>
>
>
>
>
>
>
>
>
>
>
> _______________________________________________
> Rets-dev mailing list
> Rets-dev at rets.org
> http://lists.rets.org/mailman/listinfo/rets-dev
>
>
_______________________________________________
Rets-dev mailing list
Rets-dev at rets.org
http://lists.rets.org/mailman/listinfo/rets-dev
More information about the Rets-dev
mailing list