Many organizations choose to allow direct access to systems via Remote Desktop Protocol (RDP) from untrusted networks. This presents a number of inherent risks, which opens the system up for direct exploitation via the RDP protocol. With the recent announcement of MS12-020, we are reminded of this risk: it has been reported to Microsoft that vulnerabilities exist within RDP that may allow an attacker to send a sequence of specially crafted packets to gain the ability to remotely execute code on the system in question.

Let’s take a quick step back here and talk a bit about risks posed by exposing services. Software is written (generally) by people and people make mistakes. Therefore one should assume that allowing direct access to any service from an untrusted (or even trusted) network poses some risk. The key here is making sure the benefits of allowing this access outweigh the risks posed by allowing the access (a formal risk assessment can help here). Of course, one can also (and should) put processes in place to help further mitigate the risk, if possible. In this specific example, you may have a legitimate business reason for directly exposing RDP to the Internet that outweighs the risk of allowing that direct access and that’s OK. Hopefully you have systems (IDS, logging, FIM, etc) in place to help you figure out if something malicious is going on…but just because there is risk in exposing RDP to the world doesn’t mean that you should stop doing it if your company absolutely needs direct RDP access to do business.

One must always remember that the function of IT Security within an organization is to support the organization in their ability to do business. From a purely technical security standpoint, is directly exposing RDP to untrusted networks a good idea? No. Should one present a case for requiring an additional layer of security (i.e VPN) prior to accessing an RDP connection? Absolutely. However, the same could be said for basically any network service – albeit less complex ones could be argued to have less risk of compromise due to the lack of complexity. Either way, understanding that exposed services (yes, even VPN fits in this category) poses some risk is a good first step.

So where do you go from here? First – patch your systems. Once a vulnerability (like MS12-020) is publicly exposed, the likelihood of exploitation increases dramatically. Second – understand that exposing network services poses some risk and take steps to determine whether the services need to be exposed. Third – if a service needs to be exposed, assume that it is exploitable and put some layers of protection in place (proxies, VPN, IDS, logging, SEIM, etc) to help you mitigate some of the risk posed by the exposure. Finally – continue to work side by side with the business to help promote a clear understanding of what risks presently exist and work together to come up with solutions to allow the business to continue to operate while accepting only the minimal amount of risk possible.

For the past several days I have been focused on understanding the inner workings of several of the popular file synchronization tools with the purpose of finding useful forensics-related artifacts that may be left on a system as a result of using these tools. Given the prevalence of Dropbox, I decided that it would be one of the first synchronization tools that I would analyze, and while working to better understand it I came across some interesting security related findings. The basis for this finding has actually been briefly discussed in a number of forum posts in Dropbox’s official forum (here and here), but it doesn’t quite seem that people understand the significance of the way Dropbox is handling authentication. So, I’m taking a brief break in my forensics-artifacts research, to try to shed some light about what appears to be going on from an authentication standpoint and the significant security implications that the present implementation of Dropbox brings to the table.

To fully understand the security implications, you need to understand how Dropbox works (for those of you that aren’t familiar with what Dropbox is – a brief feature primer can be found on their official website). Dropbox’s primary feature is the ability to sync files across systems and devices that you own, automatically. In order to support this syncing process, a client (the Dropbox client) is installed on a system that you wish to participate in this synchronization. At the end of the installation process the user is prompted to enter their Dropbox credentials (or create a new account) and then the Dropbox folder on your local system syncs up with the Dropbox “cloud.” The client runs constantly looking for new changes locally in your designated Dropbox folder and/or in the cloud and syncs as required; there are versions that support a number of operating systems (Windows, Mac, and Linux) as well as a number of portable devices (iOS, Android, etc). However, given my research is focusing on the use of Dropbox on a Windows system, the information I’ll be providing is Windows specific (but should be applicable on any platform).

Under Windows, Dropbox stores configuration data, file/directory listings, hashes, etc in a number of SQLite database files located in %APPDATA%\Dropbox. We’re going to focus on the primary database relating to the client configuration: config.db. Opening config.db with your favorite SQLite DB tool will show you that there is only one table contained in the database (config) with a number of rows, which the Dropbox client references to get its settings. I’m going to focus on the following rows of interest:

email: this is the account holder’s email address. Surprisingly, this does not appear to be used as part of the authentication process and can be changed to any value (formatted like an email address) without any ill-effects.

dropbox_path: defines where the root of Dropbox’s synchronized folder is on the system that the client is running on.

host_id: assigned to the system after initial authentication is performed, post-install. Does not appear to change over time.

After some testing (modification of data within the config table, etc) it became clear that the Dropbox client uses only the host_id to authenticate. Here’s the problem: the config.db file is completely portable and is *not* tied to the system in any way. This means that if you gain access to a person’s config.db file (or just the host_id), you gain complete access to the person’s Dropbox until such time that the person removes the host from the list of linked devices via the Dropbox web interface. Taking the config.db file, copying it onto another system (you may need to modify the dropbox_path, to a valid path), and then starting the Dropbox client immediately joins that system into the synchronization group without notifying the authorized user, prompting for credentials, or even getting added to the list of linked devices within your Dropbox account (even though the new system has a completely different name) – this appears to be by design. Additionally, the host_id is still valid even after the user changes their Dropbox password (thus a standard remediation step of changing credentials does not resolve this issue).

Of course, if an attacker has access to the config.db file (assuming that it wasn’t sent by the user as part of social engineering attack), the assumption is that the attacker most likely also has access to all of the files stored in your Dropbox, so what’s the big deal? Well, there are a few significant security implications that come to mind:

Relatively simple targeted malware could be designed with the specific purpose of exfiltrating the Dropbox config.db files to “interested” parties who then could use the host_id to retrieve files, infect files, etc.

If the attacker/malware is detected in the system post-compromise, normal remediation steps (malware removal, system re-image, credential rotation, etc) will not prevent continued access to the user’s Dropbox. The user would have to remember to purposefully remove the system from the list of authorized devices on the Dropbox website. This means that access could be maintained without continued access/compromise of a system.

Transmitting the host_id/config.db file is most likely much smaller than exfiltrating all data found within a Dropbox folder and thus most likely not set off any detective alarms. Review/theft/etc of the data contained within the Dropbox could be done at the attackers leisure from an external attacker-owned system.

So, given that Dropbox appears to utilize only the host_id for authentication by design, what can you do to protect yourself and/or your organization?

Don’t use Dropbox and/or allow your users to use Dropbox. This is the obvious remediating step, but is not always practical – I do think that Dropbox can be useful, if you take steps to protect your data…

Protect your data: use strong encryption to protect sensitive data stored in your Dropbox and protect your passphrase (do not store your passphrase in your Dropbox or on the same system/device).

Be diligent about removing old systems from your list of authorized systems within Dropbox. Also, monitor the “Last Activity” time listed on the My Computers list within Dropbox. If you see a system checking in that shouldn’t be, unlink it immediately.

Hopefully, Dropbox will recognize the need for additional security and add in protection mechanisms that will make it less trivial to gain long-term unauthorized access to a user’s Dropbox as well as provide better means to mitigate and detect an exposure. Until such time, I’m hoping that this write-up helps brings to light how the authentication method used by Dropbox may not be as secure as previously assumed and that, as always, it is important to take steps to protect your data from compromise.

Update (10/31/2011): Dropbox has release version 1.2.48 that utilizes an encrypted local database and reportedly puts in place security enhancements to prevent theft of the machine credentials. I have not personally re-tested this release – feel free to comment if you’ve validated that the new protection mechanisms operate as described.

Whether you choose to believe it or not, your company (given it is of a reasonable size or deals with sensitive data) is, or will be, the target of a specific technology oriented attack of some kind. And I’m not talking a basic port scan here, I’m talking an attack tailored to your environment in some way where an attacker is specifically trying to access your infrastructure. If you look hard enough within your environment, you’ll most likely find something of value (be it your secret sauce recipe, credit card numbers, SSNs/PII, etc) and there will always be people interested in getting their hands on that data.

This is the first of a series of posts that will discuss specific attack vectors that are commonly used in targeted attacks along with how I recommend you respond to and proactively protect against the attack. We’ll begin with targeted phishing attacks…

Targeted Phishing Attacks

Overview

Wikipedia defines phishing as “the criminally fraudulent process of attempting to acquire sensitive information such as usernames, passwords and credit card details by masquerading as a trustworthy entity in an electronic communication.” (source)

Common phishing attacks can be written in either a general (for a large, non-related audience) or in a targeted fashion. General phishing attempts are rather easy to recognize and many computer users have become savvy enough to not respond to those attempts (in addition, many SPAM filters catch a large number of these attempts before they even reach an inbox). However, a targeted Phishing attack is more sophisticated and is written with a specific audience (your company’s users) in mind; it’ll ask for company specific information using company specific terminology, which lends a more authentic and authoritative feel to the communication. This request for specific information may appear to be sent from a commonly known or believable email address within your organization, albeit if you dig into the email header and/or reply to address you’ll clearly notice that the email did not originate within your organization and the reply-to address is outside of your organization.

The goal of a targeted phishing attack on an organization is most likely to gain access to credentials or to some other set of information that will allow attackers to impersonate a user (to gain access to credentials, etc).

Response

A targeted phishing attack on an organization should be considered a direct threat to the security of your environment and you should respond swiftly. Some debate may exist as to whether an actual “incident” has occurred, but I generally lean towards treating a targeted phishing attempt as a live incident and treating it as such – hopefully you already have an incident response policy in place that will provide some guidance as well as empower the incident responder (I’ll write more on this in a future post). At a minimum, given you have been notified that a targeted phishing email has made its way to end-users, you should assume that users have already responded or are at risk of responding to the attempt.

If you are the recipient of a targeted phishing attack (via email), I recommend that while following your existing incident response procedures, that you take the following incident-specific reactive steps:

Notify end users immediately that the email that they received is not legitimate and if they responded to it, they should contact your helpdesk immediately (or some other team/individual that is available to assist) so that corrective actions can be taken; the specific corrective action that is taken by your helpdesk is dependant on the information being phished for. If the email is requesting credentials, then you should change them, if possible. If the email is requesting PII that can be used by an attacker to impersonate a user, then the account should be flagged in some way so that the helpdesk/administration team takes extra care when contacted. If you cannot quickly determine who actually received the phishing email, send this alert to your entire user population.

Inspect the phishing email’s message header and record all pertinent information.

If possible, put a block in place that will be prevent any outbound email being sent to the reply-to address of the phishing email. Additionally, if possible, put a block in place preventing any further attempts with the reply-to address or subject line, etc from being delivered.

If possible, run a search of your email logs to determine whether anyone responded to (i.e. sent email to) the reply-to address of the phishing email. If you do find responses, you should contact these users immediately and take corrective action on their account – corrective action should be taken whether or not you can get in touch with the user. Since the attackers generally realize that they have a limited window to “exploit” the information that they receive, it might be wise to check any remote access systems (or other systems in the organization) for activity using the userid that was provided to the attacker to ensure that they have not already made their way into your environment.

Proactive Mitigation

There are a number of strategies that you can implement to help lower the effectiveness of a targeted phishing attack. The number one strategy to combat phishing is user education – I cannot stress this enough. An informed and educated user population is much less likely to respond to phishing attempts. Regular communications should be sent out to users reminding them of information that will never be asked of them via email and that any emails received asking for this information should not be responded to and reported to your security clearinghouse (be that an incident response team, helpdesk, local security contact, etc). Additionally, your user onboarding process should include education new users of this threat and IS/IT personnel should also be regularly reminded as what information they’re allowed to ask a user for and what method of communication is appropriate for these questions.

Other mitigation strategies include:

Putting in place a filter on your email gateways and/or filtering solutions to drop any email coming from outside your organization that has your organization’s domain in the From line. Well-designed email environments should never receive email with internal From addresses from external sources – I do recognize, however, that many environments may have external providers sending in these types of emails, so exceptions may need to be put in place.

External (and Internal, if feasible) authentication should be two-factor where the second authentication mechanism uses a rotating code (i.e. RSA SecurID) or is something the user has (i.e. smartcard).

Externally accessible web pages, including system access pages (i.e. VPN, work from home, etc) should not contain company specific terminology or information that can be mined by an attacker to better craft their phishing message.

A good phishing attack is no longer easily identifiable and is written in such a way that even the most savvy of users may consider the request legitimate. Attackers are increasingly using more sophisticated phishing techniques to allow them to gather information to gain access to your environment and you should be taking steps now to help mitigate the impact that a well-crafted attack could make and plan for this eventuality.