Index:
1) Editor's Notes by Jaime Marcial
2) Announcements
3) Designing a solid foundation for our service interfaces by Jaime Marcial.
4) Application Layer Security: Myth or Reality? By Jason C. Hayek, Principal
Triad Information Security Services, LLC
5) Illinois Institute of Technology offers new short course on SOA
6) About Modularis
1. Editor's Notes - by Jaime Marcial
In this issue, we will analyze the foundation of a Service Interface and how we
can deliver all the quality characteristics expected from a mission-critical
enterprise system.
In addition, Jason C. Hayek from Triad Information Security Services, LLC gives
us some good pointers on how to think about and write secure code. He highlights
the most common mistakes that we developers overlook.
I found his article very helpful, when not only designing or implementing a
Service-Oriented Architecture, but also in my everyday software development.
I hope you find it as useful and informational as I did.
2. Announcements
* Modularis Accelerator 6 gets rave review in the October Issue of .NET
Developer's Journal
Doug Holland of the .NET Developer's Journal puts Modularis Accelerator 6
through its paces. Read the full review at the following URL:
http://www.accelerating.net/reviews/DNDJ_ProdReview.pdf
* Modularis employees donate their time and software to help i.c.stars deliver
the latest technology training to inner city young adults in Chicago. Read the
full announcment at the following URL:
http://www.icstars.org/pr/040817.htm
3. Designing a solid foundation for our service interfaces - by Jaime Marcial
Last month, we went through the exercise of defining the service interface for
the Order Management service. This month, I want to concentrate on the
infrastructure patterns that are necessary to provide a stateless and secure
persistence mechanism.
In order to provide all the quality characteristics of a critical enterprise
system, we need to think about a well-architected application architecture to
support our service interfaces. Designing a flexible logical architecture will
allow us to distribute the workloads in certain areas of our system as the
demand or load grows. This is not a new concept--layered applications have
existed for over 20+ years.
Let us think about scalability for a second. Assume that we implemented the
order management service as a monolithic class, which we expose using IIS and
web services.
Also, assume that the bulk of processing power is not in handling each web
service request, but rather in processing the request (database operations
included). We have a farm of n web service servers to handle a large number of
users. All machines are identical, and we have reached the limit of the
simultaneous requests that those servers can handle. The solution? Add another
server.
A deeper analysis of the problem shows that the bulk of the CPU cycles are
required to process authorization, data validation and business rule execution.
If we design our solution with scalability in mind, instead of adding another
server to the web service farm, we could reconfigure our physical architecture
to have the minimum number of servers handling the web service requests and
optimize the remaining servers to run the business and security code.
This may or may not be the proper solution to your situation, but it enables you
to individually load balance your web/web services interface, application and
data layers, letting you get the most from your hardware.
On the other hand, we improve maintainability by organizing the code into
well-encapsulated, clearly-defined layers. In addition, by establishing
patterns, the learning curve for a developer unfamiliar with your application
decreases dramatically.
I can go on and on about the benefits of layered infrastructure architecture, so
instead let us look at an actual design.
We can start with the following well-known stateless n-tier design:
User Interface/Service Agents/Service Consumers <-> Service Interface <->
Business Layer <-> Data Layer
In this design, lightweight classes or data objects that describe the business
entities and the relationships between them are used to transport the data
values between layers. Each layer then performs certain operations on the data
that are in-line with that layer's specific responsibilities.
For example, the User Interface Layer encapsulates the code used to render a web
page or a windows form. This layer also contains code to transform the raw data
obtained from a Service Interface into something meaningful to the application
user.
A Service Interface encapsulates the code that orchestrates the flow of business
processes. The business layer encapsulates the atomic data validation and
business policies applied to a specific entity or set of entities. The data tier
encapsulates the code that is necessary to communicate with the persistent data
store, isolating the application from having to know the mechanics of dealing
with a file system, relational database server, etc.
While this architecture is a step in the right direction, other supporting
services are required for truly enterprise-caliber applications. For example,
the User/Service interface requires access to an authentication mechanism, the
business layer requires access to an authorization service, and the data layer
may require another level of abstraction to support data source portability.
In conclusion, you can design a Service-Oriented Architecture and still end up
with monolithic implementations for each service. You should continue to spend
time carefully designing your service interfaces, but do not overlook the
architecture of the infrastructure that supports your SIs. A solid foundation
for your services will guarantee that your applications exhibit the
characteristics of sound software architecture (functionality, reliability,
usability, maintainability, scalability, flexibility, portability, availability,
and agility).
Next month, we will analyze the different infrastructure services that
complement our infrastructure architecture.
About the author
Jaime Marcial, a Senior Software Architect at Modularis, Inc., has a background
in software architecture, software development methodology, data modeling,
application development, and a host of other technologies. He serves as an
architect, trainer and consultant at Modularis. He co-authored the Modularis
Enterprise Application Development Methodology, and is one of the lead designers
and developers of the Modularis Accelerator tools. Jaime can be reached at
marcialj@modularis.com.
4. Application Layer Security: Myth or Reality? by Jason C. Hayek, Principal, Triad Information Security Services, LLC
Myths
A common belief in the development community is "security by obscurity."
Programmers will ask themselves, "Why would someone want to exploit my
application?" Or, even if someone wanted to exploit my application, we have
network security in place and we're leveraging Secure Socket Layer (SSL)
communications. Besides, application security reviews are just too time
consuming and expensive. All of the above are common myths about application
security.
Secure applications are a bit of an oxymoron, right? There is no such thing as
a totally secure application, and anyone that tells you otherwise has likely
fallen for one of the oldest myths in the book. What history has taught us is
that where there is a will to compromise an application, there is a way. Even
though no application will ever be 100% secure, the practice of writing secure
code still requires much consideration, as many applications are reaching out to
all critical areas in an organization, including those that maintain proprietary
and confidential data.
I would suggest that it is not that difficult or expensive to develop secure
applications, and if organizations change their mindsets about application
security, the cost/benefit equation will seem much more reasonable.
Changing One's Mindset
The biggest challenge in learning how to write secure application is changing
how you think about developing software. There are six overall considerations
to keep in mind when developing secure code.
1. Technology alone (firewalls, encryption, etc.) does not solve application
security issues. It is imperative to remember that most security breaches come
from inside the firewall.
2. Routine testing only discovers very common vulnerabilities. Successful
hackers think outside the proverbial box. Rather than only testing what users
are supposed to do with the application, developers should consider assessing
all the things that an inquisitive user can do with the software.
3. The most secure code is developed by the slightly paranoid. Developers
have to test their assumptions and not just assume they are valid. Keep in mind
that although applications are often developed in a "vacuum," unique security
risks present themselves when released in different production environments.
4. Determine the application specific security requirements. Before you can
determine how to write a secure application, both the business owners and
developers need to determine exactly what the security requirements are. Due to
tight schedules and market pressures, and in order to release applications to
production as quickly as possible, development team managers often do not plan
enough time for security during coding and testing
5. Consider your defense in depth strategy. One of the best ways to address
application security is to adopt a defense in depth strategy. For example, if
someone does achieve unauthorized access, are there processes in place to
protect the data from easily leaving the organization?
6. Don't downplay security training and awareness. Although training and
awareness should be considered part of a defense in depth strategy, it's
criticality to developing secure code cannot be emphasized enough. In order to
sustain a secure coding process, the entire development team needs to embrace
application security training and awareness.
The Biggest Risks Associated with Application Security
The business risks associated with ineffective application security are
tremendous. Most of the time, the cost of repairing the damage from an
application breach will outweigh the cost of securing it. Although it can be
challenging to calculate actual damages from an incident, some of the most
damaging components of an incident often include both tangible and intangible
repercussions such as permanent loss of data, loss of revenue, fraud, loss of
productivity, damage to credibility/reputation, and legal liability.
Applying Fundamental Security Principles
Applying fundamental security principles throughout all phases of development,
especially the planning and early stages, are some of the most frequently
overlooked principals of writing secure code. If developers apply the following
information security triad, they will be well on their way to building
fundamentally secure applications:
* Confidentiality - ensuring that information is accessible only to those
authorized to have access;
* Integrity - safeguarding the accuracy and completeness of information and
processing methods; and,
* Availability - ensuring that authorized users have access to information
and associated assets when required.
Avoiding the Application Security Top 5 Most Wanted List
Almost everyone that has developed applications has likely heard of the most
prevalent security related programming issues. But time and time again, these
"Top 5 Most Wanted" issues cause severe headaches for many application
development teams and exponential problems their organizations. As such, the
Top 5 mandate a dishonorable mention!
1. Buffer Overruns / Heap Overflows - Can allow the attacker to gain root /
administrator access when extra bytes of data are dumped into stack memory /
memory addresses and malicious code is executed.
2. Format String Vulnerabilities - Can allow an arbitrary value to be written
into the memory of the running program. For example, at a basic level, when a
*printf() function is called and the user can input format strings ( %s %p %x),
the *printf() function will utilize the user supplied arguments, and they may
have malicious intent.
3. Denial of Service (DOS) - DOS attacks can also occur at the application
level versus the network level. Simply attempting to login enough times (e.g.,
flooding) can lock out the particular user ID.
4. Cross-Site Scripting (XSS) Vulnerabilities - Can occur when an attacker
uses a web application to send arbitrary code/scripts to an often unsuspecting
and often trusting end user.
5. Web Application Input Validation Problems - Can occur when a Web
application accepts input from a client browser and then passes that input to a
database or CGI processor without ensuring the data is valid. The most well
know version of this vulnerability is SQL injection.
Defense In Depth
Although defense in depth may sound cliche by now, strong application security
practices consider all levels of security, not just the application layer. The
process side of an application security defense in depth strategy will include,
at a minimum, documentation of secure programming practices, coding standards,
compliance validation, and training and awareness. An organization will be
unsuccessful at executing a defense in depth strategy if application security is
an afterthought of writing the code. By leveraging secure coding practices and
identifying common vulnerabilities during the early stages of application
development, organizations will be adding layers of defenses against potential
threats.
Conclusions / Closing Statements
It doesn't have to be difficult or expensive to develop secure applications. If
organizations change their mindsets about application security, the cost/benefit
equation will seem much more reasonable. Simple modifications and additions to
the development team's thought process will go a long way toward writing secure
code. By leveraging fundamental security principles (such as the information
security triad) and being cognizant of prevalent programming issues,
particularly at the planning and early development stages, organizations can
cost effectively manage their application security risks.
About The Author
Jason Hayek is the President and Co-Founder of Triad Information Security
Services, LLC based out of Chicago, Illinois. Triad's sole focus is information
security consulting. Triad offers a wide range of service offerings including:
security strategic planning, security assessments, application security reviews,
regulatory compliance, and technology integration. One of Triad's specialties
is advising organizations of all sizes on how to effectively align information
security and business operations. Triad reduces risks associated with malicious
activity and human error by appropriately aligning People, Process, and
Technology.
You can contact Jason Hayek at:
jhayek@TRIADINFOSEC.com
(office) 847-670-6744
5. Illinois Institute of Technology offers new short course on SOA
IIT has just announced a new 2-day course centering around SOA and .NET:
SC 414 - Accelerating the Software Development Lifecycle
In this course, the latest tools, techniques, and methodologies to accelerate
the software development lifecycle will be discussed. The best practices for the
architecture, design, and implementation of mission-critical software on the
Microsoft .NET platform will also be covered in some detail.
This course will explore Service-Oriented Architecture (SOA) and its impact on
software quality, efficiency, performance, and flexibility. A practical approach
to implementing SOA rapidly and safely will be demonstrated via a hands-on lab.
Prerequisites: Participants should have a basic understanding of object-oriented
design and computer programming. Experience with Microsoft .NET is recommended,
but not required.
Who should attend: This course is valuable for anyone interested in learning
about the latest advances in software architecture, tools, and techniques that
accelerate the software development lifecycle and drive down the risk, time, and
cost of software development.
Expected outcomes: Participants will learn Service-Oriented Architecture (SOA),
Model-Driven development, and will be able to start designing and rapidly
building SOA-enabled .NET software applications.
Date: Nov 9 - 10, 2004
Cost: $695
CEU: 1.4
Course #: SC 414
Location: IIT Rice Campus - Wheaton
Course Outline:
Day 1: Interactive Discussion
* Introduction to the Accelerated Software Development Lifecycle
* Introduction to Service-Oriented Architecture (SOA)
* Impact of SOA on the Software Development Lifecycle
* Impact of SOA on software quality, performance, and flexibility
* Introduction to Model-Driven Development
* Lessons from Manufacturing: Tools and Techniques to automate software
construction
* Accelerated Lifecycle Case Study Review
Day 2: Hands-On Workshop
* Designing, Building, Testing, and Deploying an SOA-Enabled .NET application
Registration:
Online - Visit http://www.cpd.iit.edu/shortcourse/register, complete the online
form and submit.
Call Janet Reif at 630.682.6035 or E-mail reif@iit.edu
6. About Modularis
Founded in 1999 and headquartered in Chicago, Illinois, Modularis, Inc. is doing
for software, what automation and robotics has done for manufacturing. Modularis
leveraged its expertise in Service-Oriented Architecture (SOA) and automation to
build Modularis Accelerator 6, an Architected-RAD environment without equal on
the Microsoft .NET platform.
Accelerator enables Modularis customers to build scalable, available, and
maintainable .NET applications at a fraction of the risk, time, and cost
typically associated with custom software development. For more information
about Modularis Accelerator, call Gery Knapp at (312) 648-1740 x208, or visit us
on the web at www.accelerating.net.
|