Architecture-Based Self-Protecting Software Systems