We live in exciting times. Technological advances in devices, networks, and software have enabled applications and services that would have been unimaginable just a few years ago. The advent of 5G networks increases the capacity and speeds of networks, which will usher in a new age of possibilities. Smart cities are one of those possibilities.
A smart city simply means an urban space that uses sensors to collect information and software to interpret the information and act on it. Here are a few features you might find in a smart city:
- If the city’s parking spaces have sensors to know when they are in use, drivers could use an app to find an available space and pay for it.
- With sensors on traffic lights and cameras to monitor traffic, a smart city could optimise traffic flow based on real-time conditions.
- Network-enabled trash receptacles could inform a smart city when a pickup is needed, optimising resources.
- A smart city could save energy by dimming streetlights when no traffic or pedestrians are nearby.
Simplicity is the key to smart neighbourhoods
There is no doubt that the continuing proliferation of networks, Internet of Things (IoT) devices, and software will enable applications we haven’t even imagined yet. Simultaneously, explosive technological growth will enable crime on a scale and with an impact that we also haven’t yet imagined.
What’s to be done? How can we ensure that the smart cities of the future cannot be compromised? Unfortunately, nothing is ever entirely safe or secure. Bad things can always happen; the best you can do is lower the probability of bad things. For example, if you go for a bicycle ride, you are at risk for falling off and getting a serious head injury. If you wear a helmet during your ride, your risk of a serious head injury is reduced.
Smart cities are no different. They’re not incident-proof and bad things could certainly happen — system failures or malicious attacks, at the least. But that doesn’t mean we can’t design and build smart cities in a way that minimises such risk.
Much of the risk presented by smart cities will come from software. Software runs on the IoT devices that serve as the eyes and ears of the smart city; software runs on the systems that aggregate and coordinate those devices; software will make decisions and take action based on data and user actions; software will handle financial transactions and recordkeeping; software will be used in every nook and cranny of the smart cities of the future. Indeed, software is already everywhere you look, but it will only become more prevalent in the future.
Furthermore, nearly all software is built on other software. Open source software components are used as building blocks to create new software. Applications and systems, ultimately, are a complex layer cake of software components, a structure of dizzying complexity.
A quick scan of news headlines shows how risky software can be. Ransomware attacks, system failures, compromises, and data breaches have become commonplace.
Thankfully, the processes for creating better, more secure software is already well known: it is a Secure Development Life Cycle (SDLC or SSDLC), in which security is part of every phase of development. Design-time analysis such as threat modeling helps bake security into the structure of the system itself, while various types of security testing throughout the implementation and test phases help identify weaknesses that can be fixed before the software is released. Ongoing monitoring of the software supply chain helps ensure that application updates can be released expeditiously when new supply chain vulnerabilities occur.
Urban life innovations post-lockdown: Top VCs on the cities of tomorrow
It’s also important to note that application teams are frequently much more focused on functionality than security. In a breathless sprint to produce a viable product, they might ignore or defer security concerns. Software vendors usually don’t bear responsibility for failures of their products, and downstream consumers falsely assume that their vendors have taken responsibility for security.
Unfortunately, software security is difficult to quantify. Ideally, we would like software to have a security score or grade. In the case of smart cities, for example, we would require that all software have a certain minimum security score. Maybe we would require a higher score for critical systems like smart roads or emergency services.
While such a scoring system remains an elusive dream, what we can observe is how the software is built. Did the vendor use an SDLC? Can they produce artifacts, such as threat models and security testing results?
Recent NCSC guidance on “connected places”, such as smart cities, is a step in the right direction. Recognising that security must be a part of any software system is important, but quantifying it is going to be hard. Governments can recommend guidelines; how can they be enforced? Likewise, how can buyers of applications and devices know how well risk has been reduced in the products they wish to use?
Raising software security awareness among builders and buyers is the first important step in building more secure, more resilient software infrastructure. Builders need to incorporate security in every phase of application development, from design through implementation, testing, and maintenance. Automated tools such as static code analysis, software composition analysis, and fuzzing can help flush out more vulnerabilities during the development cycle, resulting in more resilient, more secure products.
Buyers need to be aware that the security of the products they purchase is critically important. They need to understand how software is created, and evaluate vendors and products based on how they build products and how they handle security and risk.
The best way to build the infrastructure of the future, such as smart cities, is with our eyes wide open and a full understanding of how to minimise risk.