  Embedded devices are increasingly present in our everyday life. They often
process critical information, and hence, rely on cryptographic protocols to
achieve security. However, embedded devices remain vulnerable to attackers
seeking to hijack their operation and extract sensitive information by
exploiting side channels and code reuse. Code-Reuse Attacks (CRAs) can steer
the execution of a program to malicious outcomes, altering existing on-board
code without direct access to the device memory. Moreover, Side-Channel Attacks
(SCAs) may reveal secret information to the attacker based on mere observation
of the device. Thwarting CRAs and SCAs against embedded devices is challenging
because embedded devices are often resource constrained. Fine-grained code
diversification hinders CRAs by introducing uncertainty to the binary code;
while software mechanisms can thwart timing or power SCAs. The resilience to
either attack may come at the price of the overall efficiency. Moreover, a
unified approach that preserves these mitigations against both CRAs and SCAs is
not available. In this paper, we propose a novel Secure Diversity by
Construction (SecDivCon) approach that tackles this challenge. SecDivCon is a
combinatorial compiler-based approach that combines software diversification
against CRAs with software mitigations against SCAs. SecDivCon restricts the
performance overhead introduced by the generated code that thwarts the attacks
and hence, offers a secure-by-design approach enabling control over the
performance-security trade-off. Our experiments, using 16 benchmark programs,
show that SCA-aware diversification is effective against CRAs, while preserving
SCA mitigation properties at a low, controllable overhead. Given the
combinatorial nature of our approach, SecDivCon is suitable for small,
performance-critical functions that are sensitive to SCAs.
