Design Article
Comment
ReverseICS
cdhmanning
Hard-wired passwords are generally a bad idea, but they do have one benefit: ...
Best practices: Improving embedded operating system security
Bill Graham, Wind River
2/14/2012 3:02 PM EST
For example, as reported on CBS News, attackers were able to gain control of a home insulin pump and change its settings with the ability to seriously harm the patient
In a recent case in South Houston, Texas, CNN reported an attacker gaining control of the human machine interface (HMI) of the SCADA system controlling parts of the water treatment plant. In that case, the HMI security consisted of an easily guessed password.
Security is now a top priority for embedded developers because the systems they build can and will be used in critical infrastructure that is increasingly more automated and connected, in some cases to the outside world.
Some classes of devices are already secure because it was a top requirement from their initial concept, for example, communication devices used by the government and military. A majority of devices, however, are potentially unsecure. What is important to realize is that no device is ever completely secure, but developers need to strive to improve the odds through good design, programming, and configuration.
Security Best Practices
There are some basic rules and principles that help guide design and development decisions when building devices (Table 1 below). First and foremost, it’s important to realize that security needs to be built in rather than tacked on. It’s important to improve existing and legacy systems the best way possible, and new projects should have security built in from day one. It will pay off considerably down the road.

The following is a list of security best practices (source: Writing Secure Code by Michael Howard and David LeBlanc,, 2004) as applied to embedded development:
* Minimizing the attack surface: Reduce the number of attack vectors into the system. Turn off features, services, and access not necessary for most users.
* Least privilege: Assign just enough privilege to an application, task, or process to achieve the job at hand. Too high a privilege level allows for unwanted access or behavior.
* Defense in depth: Rely on more than one layer of defense and don’t count on any one layer as providing complete protection.
* Diversity in defense: Use different types of defense devices, software, or vendors.
* Securing the weakest link: Secure the most unsecure component, interface, or application, the most likely avenue of attack; because any system is only as good as its weakest component.
* Fail-safe stance: Expect vulnerabilities to be found; expect physical and remote attacks on the system.
* Assumptions about external systems: Avoid assumptions about other devices your product will be connected to. You can’t assume external devices are secure, and be aware that your device is connected to a wide-open network.
* Security by default: Set the default configuration and behavior of the system to be as secure as possible. Turn off features, services, and access not necessary for most users.
* Simplicity and usability: Use simpler designs that are less likely to have security bugs and vulnerabilities and are easier to understand, audit, and test.
It’s important to note that no system is ever completely secure. However, as we shall see later in this article, there are practical steps that can be followed that dramatically improve security for embedded systems. In some cases, these techniques can be applied to existing systems; in other cases, they are proposals for future system designs.
Next: Page 2



john280z
2/15/2012 2:47 PM EST
Sorry, pump failure wasn't an attack:
http://www.securitydirectornews.com/blogs/?p=2514
Sign in to Reply
Bill.Graham
2/16/2012 11:54 AM EST
Link is incorrect, the article should have gone to this story "Was The Three Character Password Used To Hack South Houston's Water Treatment Plant A Siemens Default?
" - http://threatpost.com/en_us/blogs/was-three-character-password-used-hack-south-houstons-water-treatment-plant-siemens-default-11
Sign in to Reply
cdhmanning
2/19/2012 9:24 PM EST
Hard-wired passwords are generally a bad idea, but they do have one benefit: When the people at the plant forget the password (or the only guy that knows it gets hit by a bus or goes on vacation) the engineers can still get in and fix it. However that should also require some sort of mechanical security (eg. need a button press on the PLC).
All SCADA kit should be networked by VPN, making the passwords moot.
As for Stuxnet.... Well that was really a vector on the programming computer and not on the embedded device per se.
I don't think there is really any embedded OS that can prevent a Stuxnet-like attack. The only way I can really think to do it is to run the programming software on the PLC and downplay the role of the programmer-PC to being just a dumb web interface.
Sign in to Reply
ReverseICS
2/22/2012 4:30 PM EST
Hi Bill -
Does Wind River have any firmware audit tools for developers to use against vxWorks (for example)? Or have any interest in developing a checkkit? I certainly am interested...poke me on twitter sometime.
Reid (@ReverseICS)
Sign in to Reply