CS 487 — Secure Computer Systems
Foundations of secure computer systems: software vulnerabilities and exploitation, memory-corruption defenses, cryptography (symmetric/asymmetric, hashing, PKI), authentication and access control, OS and side-channel security, and network defense.
-
Linux Permissions, Set-UID & Environment Variables
Linux enforces access control through permission bits and user/group ownership — but the Set-UID mechanism deliberately grants temporary elevated privilege, making Set-UID root programs a prime target for privilege escalation via environment variable manipulation.
-
Control-Flow Hijacking
How a stack buffer overflow lets attacker-supplied input redirect a program's execution — overwriting local data, function pointers, and the return address, up to injecting shellcode for a privileged shell.
-
Shellcode
When there is no convenient function to redirect execution into, attackers inject their own machine code. This module covers the Linux system-call ABI, building a NULL-free execve("/bin/sh") payload using the stack for position independence, and deploying it with a NOP sled — plus the defenses (NX stack, ASLR, stack canaries) that motivated later techniques like ROP.
-
Code-Reuse Attacks: ret2libc
When a Non-Executable Stack (DEP/NX) blocks injected shellcode, attackers pivot to code that is already loaded — redirecting the return address straight into libc functions like system("/bin/sh"). This module builds the ret2libc technique from first principles and shows why it sets the stage for ROP.
-
Return-Oriented Programming (ROP)
DEP/NX blocks injected shellcode, but it cannot stop an attacker who reuses the program's own instructions — ROP chains short existing code sequences called gadgets, each ending in `ret`, to perform arbitrary computation without a single byte of injected code.
-
Control-Flow Integrity (CFI)
ROP and ret2libc attacks succeed by bending indirect control-flow transfers to arbitrary targets; CFI defeats them by enforcing at runtime that every indirect jump, call, and return lands only on destinations permitted by a statically computed control-flow graph.
-
Software Testing, Fuzzing & Symbolic Execution
Covers automated vulnerability discovery through the lens of software testing theory (black-box vs. white-box, code coverage), coverage-guided fuzzing with AFL and libFuzzer, sanitizers like AddressSanitizer, and symbolic/concolic execution with SMT solvers.
-
Format-String Vulnerabilities
A format-string bug arises when attacker-controlled data is passed directly as the format argument to printf-family functions, enabling arbitrary stack reads (%x/%s), arbitrary memory writes (%n), and ultimately control-flow hijacking.
-
Reverse Shells
Understand how a reverse shell flips the connection direction to defeat inbound-blocking firewalls, and trace the mechanism from file descriptors and dup2 redirection to the one-liners attackers drop as exploitation payloads.
-
Integer Overflow
Fixed-width integers silently wrap, truncate, or change sign in C — and when those integers control buffer sizes or security checks, the result is exploitable. This module covers the three flavors of integer overflow, how attackers leverage them, and compiler/code-level defenses.
-
Heap Exploitation
Explores how dynamic memory managed by glibc malloc works — chunks, headers, and free lists — and how attackers exploit that structure through heap buffer overflows, use-after-free bugs, and metadata corruption to achieve arbitrary writes and control-flow hijacking.
-
Memory-Corruption Defenses: Canaries, DEP/NX, ASLR & RELRO
Surveys the four standard OS- and compiler-level mitigations — stack canaries, DEP/NX, ASLR/PIE, and RELRO — explaining what each stops, how they interact, and how the attack modules progressively sidestep them.
-
Malware
A survey of malicious software: taxonomy (viruses, worms, trojans, ransomware, rootkits, botnets), how malware gets onto a system, evasion techniques (encrypted, polymorphic, and metamorphic viruses), and detection/defense approaches (signatures, heuristics, IDS/IPS).
-
Symmetric-Key Cryptography
Covers the foundational goals of cryptography, Kerckhoffs's principle, and the symmetric encryption model — including classical ciphers and their failure modes, stream vs. block ciphers, DES/3DES history, AES, block-cipher modes (ECB/CBC), and the key-distribution problem that motivates public-key crypto.
-
AES, Encryption Modes & Hash Functions
Covers the AES block cipher and its four internal transformation rounds, the encryption modes (ECB, CBC, CFB, CTR) that determine how AES handles multi-block messages, PKCS#7 padding, IV requirements, and cryptographic hash functions including the SHA family, broken algorithms, and practical applications such as password storage with salts.
-
Public-Key Cryptography
Introduces asymmetric (public-key) cryptography as the solution to the symmetric-key distribution problem, covering the keypair model, Diffie-Hellman key exchange, RSA fundamentals, hybrid encryption, digital signatures, and the man-in-the-middle threat that motivates PKI.
-
RSA
RSA is the most widely deployed public-key cryptosystem, securing SSH, TLS, and digital signatures. This module covers key generation, encryption and decryption, correctness via Euler's theorem, digital signing, and why textbook RSA must never be used without padding.
-
PKI & Authentication
Explains the key-authenticity problem and how Public Key Infrastructure solves it with X.509 certificates, certificate authorities, and chain-of-trust verification. Also covers entity authentication factors — passwords, tokens, biometrics — together with secure password storage, multi-factor authentication, and common attacks such as MITM and password cracking.
-
Access Control
Access control is the mechanism that decides which authenticated subjects can perform which operations on which objects. This module covers the access control matrix and its two practical representations (ACLs and capabilities), the four major design policies (DAC, MAC, RBAC, ABAC), formal confidentiality and integrity models, and the principle of least privilege.
-
Side Channels, CPU Bugs & OS Security
Explores how attackers extract secrets through physical and microarchitectural side channels — including cache timing, Meltdown, and Spectre — and how operating systems enforce the kernel/user boundary to limit damage.
-
Intrusion Detection & Firewalls
Covers how intrusion detection systems (IDS) identify malicious activity through signature-based and anomaly-based analysis, and how firewalls enforce network policy via packet-filter, stateful, and application-proxy mechanisms.
-
Network Security: TCP/IP, Sniff/Spoof & IPsec
Classic TCP/IP was designed for connectivity, not security — no source-address authentication and no confidentiality. This module covers how attackers exploit those gaps through packet sniffing and spoofing, and how IPsec's AH and ESP protocols retrofit security at the network layer.