The growing linkage of embedded controllers to the Internet may provide special risks to our lives. These controllers exist in automobiles, appliances, specialized electronics. What are likely to be some of those special risks that may occur?
First, to answer one remark I've received, this is NOT a 'Year 2000' blog. Instead, it is a review of factors that seemed to parallel the experiences of many computing technologies as they linked to the Internet for the first time.
In addition to reading anything Dr. Gary writes on software security, read the excellent materials on C coding issues that David Chisnall writes. Both provide excellent reasons why C coding can be difficult to do securely. What are other risk factors?
For the most part, embedded coding is very direct and closely linked to hardware. The API's that component manufacturers supply can be very slim, to help performance. In these cases, code must run with high privilege and operate at the Intel equivalent as 'Ring 0'. In this world of cryptic code with high privilege hitting somewhat immature API's, any kind of mistake creates tragic results.
There won't be a lot of security tools that will inspect your code and find glitches like unwise variable overloading, memory leaks, etc. In fact, in too many cases, the objective is to get the code out quickly, given the shelf life of many of the electronic products. What does this mean?
It means the attacker will find a lot of products designed to meet deadlines, not validate client input. They will find products that have configuration systems that fall under attack themselves. My router's saving the password as a string in the unencrypted configuration file is a sad example of what we'll see. Want your refrigerator to reorder milk as the carton empties? How will it store your credit card number? How will the box in your car, the one that pays your tolls automatically, how will it identify you to the readers? Will someone be able to impersonate you and use your account balance?
The problem is pervasive and seems to cut across many, many products. I'm interested in your response; list it below.