The United States energy grid is composed of many moving and non-moving cyber security assets that all have to, to some degree, speak the same language. The language of machine-to-machine communications has become big business lately, however devices that control how the power gets from the plant to your light switch have been talking their talk for many years.
DNP3 is an IEEE industry standard based on an open architecture that is formally offered by both an open source project (OpenDNP3) as well as proprietary vendor-supported solutions for the spec. DNP3 can be found supporting machine-to-machine communications in various facets of the US energy grid, specifically supporting communications between devices in substations, such as battery banks, circuit breakers, and re-closers.
Adam Crain, founder of Automatak, is one of the primary developers and contributors to the OpenDNP3 project. Through Adam's open source tool sets, several discoveries regarding the security and efficiencies of the proprietary solutions have been made.
As a software professional and open source enthusiast, Adam has spent the last 12 years working in many areas of automation including telescope control, solar tracking, and utility supervisory control and data acquisition (SCADA) systems. He's also an expert in all aspects of software testing and validation.
Adam answers a few of my questions here.
How did you get involved with the Distributed Network Protocol (DNP)?
My first exposure to DNP was commissioning SCADA systems at a large utility and debugging communication issues on various networks. After that, I worked at a startup where I helped write and release an implementation of DNP under the permissive Apache license. Since that time, I've been the lead maintainer of that project.
What is OpenDNP3?
OpenDNP3 is a production-ready reference implementation of the DNP specification (now an IEEE standard). It's efficient enough to run on resource-constrained embedded systems, but also scales to meet the connectivity requirements of large utility SCADA masters. The core is written in modern C++11, but we provide bindings.
Why is OpenDNP3 more secure than the proprietary implementations?
I think this primarily stems from our holistic approach to testing. We have very high code coverage with our unit and functional testing suites. We also perform regular negative testing (fuzz testing) to look for implementation flaws that could result in security defects. In fact, we're conducting an industry-wide research study that is showing how much the proprietary vendors need to improve their testing practices.
What is the OpenDNP3 community like?
We have a small group of core developers and many users. Our mailing list is quite active, and users are constantly driving the direction of development. There are several consultancies that provide services like custom product integration and training to those that need a little extra help or need to move quickly. Companies incorporating DNP as component don't have to worried about being at the mercy of a proprietary vendor.
With the recent security findings, I except that we'll be getting a lot more attention from the big vendors in the utility space.