Application
security - the weakest link
by Itay Haber
You wouldn't walk into a bank and find money or valuables laid out in plain
view and easy to reach. However strong a bank's walls are, the assumption is
that people who get in legally during normal working hours might still have
malicious intent, let alone those who might succeed in breaking in at night.
This is the reason why money, gold bars or safe deposit contents tend to be
further secured by vaults, security guards, locks and thick steel doors.
Although this may be commonsense, a lack of
security is pretty much standard when it comes to organizations with web
sites allowing customer to purchase goods or make enquiries online. While
perimeter security is well addressed through products such as firewalls,
application level security is too often disturbingly neglected.
The weakest link
According to a recent survey published by
San Francisco's Computer Security Institute and the FBI, nine out of ten
web-based applications tested were susceptible to serious security breaches.
Some were open to fraud, while the majority of the rest unknowingly allowed
partial or full access to sensitive information - access that can allow
hackers to modify and manipulate both raw data and application code. Just
because your application hasn't been hacked (assuming you can be certain of
that to begin with) - doesn't mean it can't be.
The costs of a security breach are quite
obvious. When any sum of money can be transferred from your bank account to
that of your hacker's, the liability of a breach is practically unlimited.
Aside from the direct monetary value of security breaches, they can also
result in less quantifiable costs such as damage to reputation, poor brand
image or customer dissatisfaction.
Any vulnerability can be exploited by both
amateur and professional hackers, either for fun or for the financial or
business benefit that results from their penetration. In fact, security
breaches can be the result of a combination of bugged code and an innocent
user's actions or mistakes.
Get development right
Software is only ever as good as the code
that lies behind it. No program can be completely bug free. However, basic
development and testing methodologies must be adhered to if companies are to
make sure the code is free of the high-risk/high-impact bugs that could make
the application crash, give the wrong output or allow users to execute
commands they are not supposed to.
While these principles are often no more
than elaborate descriptions of what commonsense would dictate, commonsense
is, alas, not so common. This is why getting external, specialized
assistance in the development stage can be a very worthwhile investment.
Furthermore, the sooner errors are
recognized, the less costly they are to correct. This logic should be
applied as early as the requirements development stage, where initial bugs
can be detected if properly tested.
The functional aspect of programs is the
most important issue for everyone involved in development, yet critical
'functional' bugs often make their way into the end product. It is no wonder
then that information security is, more often than not, given less
attention, when organizations can't even make sure the application does what
it is supposed to.
Don't get trapped in the web
An easy way to minimize security risk is to
run an application on a standalone machine, not connected to the internet or
intranet. While philosophically speaking this is a logical solution, it is
as practical as closing down a business to make sure that costs are kept to
a minimum.
Despite the burst of the dot-com bubble,
the internet is here to stay. An old tactic to encourage businesses to
advertise in the yellow pages claimed: "If you're not there - you're
nowhere." This is quite true for the internet today. What's more,
unlike the yellow pages, the internet is not just a fancy business directory
that includes some flashy brochures and background information. Web sites
allow customers to perform actions, execute commands and even place
transactions. These features, by their very nature, dramatically increase
the challenges developers and administrators face trying to secure those
sites from malicious abuse.
Another way the web can increase security
risks is the accessibility of hacking tools. Hackers' web sites, where these
'professionals' can exchange ideas, participate in newsgroups, download
tools and get updated on the latest trends and technologies abound.
Furthermore, legitimate software systems vendors often publish their
software's known vulnerabilities on the web and suggest a way to protect
against the vulnerability or offer a patch that fixes the problem.
Unfortunately hackers often make better use of this information than the
people it is published for.
Common application-level security
vulnerabilities include
- Confusing infrastructure security with
application level security - firewalls and intrusion detection systems
(IDS) are limited in their ability to provide application level
security. For example, a firewall cannot be allowed to block port 80, as
it would be practically synonymous to prohibiting internet access. Hence
having the best available firewall still does not ensure
application-level security.
- Inadequate development - errors in the
common gateway interface (CGI) scripts of web-server applications. Since
new code lines and patches are frequently added, errors might be created
even when development was bug-free.
- Source code availability - when we look
at a piece of paper we cannot view the molecules that make it without
the use a very powerful and expensive microscope. However, when we look
at a web page this microscope, a.k.a. 'view source' is readily available
to all. This allows for viewing hidden fields or file naming
conventions.
- False sense of SSL security -
organizations that use the secure sockets layer protocol usually realize
the importance of data security, however they may wrongly assume that it
provides application-level security. It does not. Most of the following
forms of attack are possible even in the presence of SSL.
Some common application-level security
attacks include
- Hidden field manipulation. As a web
page's source code is easily available, this allows anyone to view
hidden fields, which are frequently used to provide status information
to the server. Unfortunately it also allows hidden field tampering.
Going to the local camera shop one can't really go behind the counter,
change the camera's price tag without the shopkeeper noticing and then
buy it for the reduced price. However, going home and visiting the
shop's web site where the same camera's price information is stored in a
hidden field might be different.
- Cookie poisoning. Since cookies are sent
from the server to the browser and since they are easily viewable and
editable, they can be used to attack the server. If the application does
not expect cookie modification it may process a poisoned cookie, which
could modify fixed data fields, allow viewing of unauthorized
information or enable users to masquerade as someone else.
- Buffer overflow. Overloading the server
with more information than it expects to handle (e.g. a text string with
10,000 characters instead of a maximum expected number of 25
characters). Thus can result in server failure, malicious code
execution, overwriting of crucial system data etc.
- Known vulnerabilities. As mentioned
above, hackers often make better use of information published by
software vendors about their products' vulnerabilities than the people
it is trying to assist.
- Cross-site scripting/forceful browsing.
Use of the address line to perform actions. Normally this is achieved by
adding a script tag to a URL (uniform resource locator). As with cookie
poisoning, if the web site does not expect such URL modifications, it
may execute the malicious command or allow breaking out of the server's
root directory when the hacker refreshes the page.
- Database manipulation. Free entry
fields/forms might be used to enter valid SQL commands.
The missing piece of the puzzle
In the day and age, when not enabling
online access to services and information is simply unthinkable,
application-level security is crucial. It is as important an element as any
other to complete the security puzzle, which is required to maintain the
performance, integrity and reliability of any system. While the reasons for
lax application-level security vary, they are in fact no more than mere
excuses.
The solution is a combination of proper
development and testing (starting from the design stage) with as strong an
emphasis on security as on any other element. And, where necessary,
organizations should apply adequate and properly maintained infrastructure
security applications, and adequate and properly maintained
application-level security applications.
Itay Haber is marketing manager for
TesCom (www.tescom-intl.com)
|