Securing a Private Intranet? 41
crustythecrab asks: "My company wants to take a web-based data management system I wrote which runs on a closed network not connected to the internet and put it out on the net so everyone can access it remotely. The number one issue of course is security, and I've been asked to write a paper on how to make the system 'secure' in order to convince management that it will be safe to proceed. But the question runs through my mind: How secure is 'secure'? I'm running all UNIX, no Windows of anything on the server side, and I'll certainly recommend a VPN, but since nothing is 100% secure, I was wondering what the current state of the art in 'Intranet' security is. Are there any novel new concepts out there. Or do you just put up a VPN and hope for the best?"
It might be too late... (Score:5, Insightful)
Re:It might be too late... (Score:2)
Wonderful. I guess he should put in his resignation now because what he's doing is impossible.
I'm not trying to say you're wrong. I say the same thing about user interfaces and usability. What I've come to realize, however, is that
Re:It might be too late... (Score:2)
I didn't say that; you'll note I used the word might. The original poster didn't give any information about what security considerations had been part of the design, so we don't have enough information to evaluate this possibility.
If security was not part of the design, and issues I referred to were not considered, then it might very well be easier and cheaper to rebuild the system/application with security
You should set up your VPN, (Score:2)
How Now Brown Cow (Score:5, Funny)
Re:How Now Brown Cow (Score:2)
two alternatives: (Score:4, Informative)
Alternatively you could add VPN access to your intranet, allowing remote users to log in via an encrypted tunnel. This would have benefits and drawbacks over the above method; it would be more secure, but less accessible. (You may not consider this a bad thing.) The key, if done correctly, would be more secure than a password a user could remember, but it might also be treated less securely and stolen from a remote machine.
Two things to remember (Score:1)
2. Security belongs in the application as well as in the web server. For instance, if your web app takes user input and constructs SQL from it, it may be vulnerable to SQL injection [sqlsecurity.com]. There is nothing you can do to the web server to immunize your app aga
Re:Two things to remember (Score:2)
not applicable (Score:3, Insightful)
Use an IPsec VPN (Score:3, Insightful)
I don't really understand why you're nervous about going with a VPN. There are really no other "cutting-edge" solutions available that have been reliably tested, at this point.
VPN's may not be cutting-edge, but at least they have some kind of track record and have the advantage of being stable enough that you can deploy an application without taking unnecessary risks.
I would follow this up with some relevant URLs but my girlfriend is freaking out because there's a spider on the ceiling and she's too chicken to swat at it with a broom. Meh.
Some potential options (Score:5, Informative)
Some potential options are:
* Authentication / Confidentiality - Application layer
- Consider using an authentication scheme for access to portions of your web site - this can be through self-generated X.509 certificates, distributed to your users for example. Such certificates have the advantage of providing both authentication, and encryption at the application layer.
* Authentication / Confidentiality - network layer
- A VPN is a step in the right direction I suspect. Something like the openvpn suite may be appropriate. If you wish to use openvpn for authentication as well, you'll probably need to find a relatively secure mechanism to distribute key data.
You may wish to consider making up a 'autorun' CD for each user, which contains the key data, establishes the vpn link, copies the x.509 key to the appropriate location in the users browser config files, and connects to your application. If your end-users are windows machines, it should be relatively easy to automate. If you have unix boxes at the user level, then you may be able to get away with something a little less streamlined.
In this setup, your 'CD' becomes your key. When your user wants to access the 'work application', they pop the CD in their drive, and wait for a connect. You may wish to overlay password access controls on either your openvpn or http server, in order to guard against loss of a CD implying access to your network. In addition, auditing access to your network is a critical (if somewhat difficult) part of your security profile.
Alternatively, you could investigate:
* hardware tokens, or SecureID related technology. Many of these systems use usb these days, so there's less of a problem with lack of card readers like there used to be.. It really depends on how much you really want to spend.
* Dial up. This is becoming more and more difficult though - often, a user will have a modem and ADSL/Cable link active at the same time, so without additional security controls, you effectively have an uncontrolled gateway to your network.
However, in summary, I'd recommend:
* Application level identification (and possibly encryption). Potentially x.509 certificates, or strong passwords.
* Network level identification and encryption (potentially something like openvpn, but not using the zero-configuration options)
* Some form of effective auditing in lieu of an effective certificate revocation service.
Again... security is very much a marriage of risk, threat, and cost. Some of the above solutions are probabably worth considering in low threat environments, where cost is an issue, and the number of users is easilly manageable. When you have a high threat environment, or where money is not an issue, then a more 'packaged' solution would probably be appropriate.
Red.
Risk-based approaches (Score:5, Insightful)
(1) figure out how valuable the data really is: what would it cost you if it were disclosed.
(2) figure out who you really want to have access to the data, and under what rules. (This is called a "security policy").
(3) Figure out a way to enforce (2) without exceeding (1).
Completly Secure is unplugged (Score:1)
Even UNIX VPN's can become vulnerable.
Your biggest threat.... (Score:1)
Off topic, but worth mentioning.
On the flipside -- I can still log into my old companys web portal using my old account. Its been three months now, and I still can get in with admin privs.
Silly admins.
Good luck.
ssl (Score:2)
Otherwise, you have to support god knows how many idiots with the VPN client software. Forget it unless you want to support a collection of non-http services.
Common sense (Score:2)
Use VPNs to secure connectivity, and intrusion dectection like tripwire to keep your servers safe.
Outthink the intruder... (Score:4, Informative)
SealBeater
Don't do it. (Score:3, Insightful)
Hire Someone (Score:3, Insightful)
Re:Hire Someone (Score:1)
Re:Hire Someone (Score:1, Informative)
SSL w/Certificate Validation (Score:1)
You would create these certificates, and then physically distribute them to your remote users.
Using this method with a login/password provides you with end-to-end security from a known set of clients.
Sound good? Pick up the O'Reilly OpenSSL book for more info.
Read the OWASP guide (Score:4, Informative)
The Open Web Application Security Project [owasp.org] have a guide [owasp.org] to help those who want to improve the security of their web applications. I've had a skim and it looks pretty good. They claim two million downloads, so other people must think so too. :-)
If you're feeling lazy, you could do worse than reading their list of the top ten web application vulnerabilities [owasp.org].
VPN options (Score:2)
Some people have said "just use https", I don't think that's a very good suggestion at all. The only thing that SSL really provides in this context is end-to-end
Re:VPN options (Score:2)
I made a webapp which does that, you click on a "login using cert". I still prefer logging in to be explicit, but you can have your server reject https connections from clients without a valid or recognised certificate.
Re: "How secure is secure?" (Score:3, Informative)
Honestly and no joke, that's how I curb my paranoia. I take a look at the physical security and say, "Well, at least I'm doing better than THAT," and stop worrying so much.
Don't let remote VPN users have direct access. (Score:2)
What you do is let them VPN in to a different "quarantine" network and firewall off that network from the actual servers. The rules will allow a bit more access but limited to only what is deemed necessary for _remote_employees_.
Also employee notebook PCs and t
Risk assessment NOT technology is the key (Score:3, Insightful)
Then and only then can you properly secure the data with appropriate policies, and implement the policies with procedures and technology.
Then repeat every so often.
Remember security is a process!
Treat the intranet as you treat the internet (Score:3, Insightful)
I always SSH between boxes, avoid FTP unless it is publically available files (like ISO images of Red Hat) and deploy services that should be secure over SSL (IMAPS, HTTPS, SMTPS, and other encrypted channels)
Otherwise, you run the risk of having your entire intranet compromised if one machine is compromised or the firewall is broken. But if you play it safe, the worst case scenario is a single machine is infected or the firewall goes down, but not much more.
Application Security (Score:3, Insightful)
Arguably the most important form of security for something like this is application security. When you receive variables in a form, do you check them in the form page before submitting AND in the receiving page to make sure you don't have any rogue POST'ers?
In fact, have you disabled passing variables by GET? This doesn't protect variables absolutely, but it will stop the casual snoopers.
Also, if you have any includes that are just utility pages, are they built/secured so that someone couldn't wright a webpage on another computer, include it, and get access to information allowing them to break the code? (Server-side includes should be in a non-publicly accessible directory, or failing that, should be coded such that they produce a blank page. This can be accomplished by recquiring a server side variable be set a certain way before the include to enable the page.)
Also, after you've authenticated a user, how do you keep the session open? Do you just pass a user variable around, or do you verify at each page? If you just pass the variable around, it could be susceptible to altering, especially if it's a numeric id that is auto-incremented, or an obvious string like an email address.
Instead of paassing the variable around, if you can't depend on server-side sessions, it's a good idea to generate one-off unique session id's that are good for a limited amount of time, and aren't auto-incremented (maybe an MD5 hash, or a GUID), which makes it much more difficult to hijack.
If you use access to an out-of-process resource (like a database), do you implement user security there, too? If you have read only, or no access to important tables, than even if you application code is compromised, that still prevents an attacker from wreaking havoc elsewhere...
VPN and the mythical 'Trusted Client' (Score:3, Insightful)
Private LANs usually have poor security since they're allegedly cut off from public access. That means older version of daemons, unfiltered access from anywhere to anywhere, low/no security logging, and whole forgotten servers. Once you're on the LAN, you usually have free access to everything for as long as you need to guess the password/crack a daemon.
One just has to crack the remote workstation (which are typically much less secure than an onsite station), and then go back out via the VPN to the private LAN. Same way a lot of these email worms get in: the company mail server/firewall filters out all the trojans/attacks, but there's always that one clueless dialin user with direct LAN access to start the domino effect.
Either firewall the VPN down to accessing only specific IPs AND ports, or put your service on the public Internet and use appropriate authentication.
I suggest the latter, security on a VPN will only get worse as users want to do more with it, and IT staff get the shits with constant requests to update access controls.
Don't forget to keep things in perspective. (Score:3, Insightful)
How secure is your LAN? How secure are your laptops? How about your suppliers/contractors/customers systems? How much do you trust employees?
One-Time Password generators (Score:1)
NAT + SSL + authentication (Score:1)
Use a hardware router and network address translation to stick the web stuff on a nonroutable network like 10.x.x.x or 192.168.x.x and only have a single port on the router show up on the public Internet.
Then, with a combination of SSL and password authentication you ought to be about as secure as you can make things.
Layer it on! (Score:2)
Then it's a matter of authentication security. Make sure the VPN passwords are unique and not the same as the application passowrds, so you can revoke a compromised (stolen) laptop w
securing intranet (Score:1)