This practical, hands-on course introduces students to the basic building-blocks and the underlying scientific principles of embedded systems. The course covers both the hardware and software aspects of embedded procesor architectures, along with operating system fundamentals, such as virtual memory, concurrency, task scheduling and synchronization. Through a series of laboratory projects involving state-of-the-art processors, students will learn to understand implementation details and to write assembly-language and C programs that implement core embedded OS functionality, and that control/debug features such as timers, interrupts, serial communications, flash memory, device drivers and other components used in typical embedded applications. Relevant topics, such as optimization, profiling, digital signal processing, feedback control, real-time operating systems and embedded middleware, will also be discussed. Prerequisites: Experience in C programming.
This course addresses the problem of security in open computational systems, including computers and communication networks, i.e., under a distributed systems perspective. No pre-requisites are demanded on security subjects, but it is expected that students have at least introductory notions of: computational systems and computer networks; operating systems and distributed systems. The valences acquired with the course consist of the knowledge of the foundations, main paradigms and models of security in computer systems and networks from a broad perspective. Students will also be able to understand the main strategies and decisions behind the design of secure computer systems, and will be exposed to the most relevant examples of current systems and technologies. Students will be able to extend this knowledge with subsequent post-graduate studies, or to directly apply it in their professional life, with an advantage in relation to researchers or professionals with a shallow or casual training in security. Throughout the course, students are intended to deal with fundamental security paradigms, like cryptography and access control, or with models for system security such as firewalls, authentication and authorization, key distribution centers, electronic transactions and payment. They will understand the fundamental causes of insecurity -- vulnerabilities, originating from design and configuration or operation mistakes; and attacks caused by hackers, leading to intrusions -- and the several design strategies and tradeoffs to cope with the former. Students will be exposed at introductory level to concrete technologies like: DES, AES, IDEA, RSA, MD5, SHA, DigiCash, SSL, SSH, Kerberos, PGP, IPTables, Snort. A paper case study will consolidate the course subjects around the design of a secure enterprise system.
Some of today's most damaging attacks on computer systems involve the exploitation of network infrastructure, either as the target of attack or as a vehicle to advance attacks on end systems. This course provides an in-depth study of network attack techniques and methods to defend against them. Topics include firewalls and virtual private networks; network intrusion detection; denial of service (DoS) and distributed denial-of-service (DDoS) attacks; DoS and DDoS detection and reaction; worm and virus propagation; tracing the source of attacks; traffic analysis; techniques for hiding the source or destination of network traffic; secure routing protocols; protocol scrubbing; and advanced techniques for reacting to network attacks. Prerequisites: Introduction to Computer Security (18-730PP).
Poor software design and engineering are the root causes of most security vulnerabilities in deployed systems today. Moreover, with code mobility now commonplace -- particularly in the context of web technologies and digital rights management -- system designers are increasingly faced with protecting hosts from foreign software and protecting software from foreign hosts running it. This class takes a close look at software as a mechanism for attack, as a tool for protecting resources, and as a resource to be defended. Topics covered include the software design process; choices of programming languages, operating systems, databases and distributed object platforms for building secure systems; common software vulnerabilities, such as buffer overflows and race conditions; auditing software; proving properties of software; software and data watermarking; code obfuscation; tamper resistant software; and the benefits of open and closed source development. Prerequisites: Introduction to Computer Security (18-730PP).
This class is designed to provide graduate students an understanding of the fundamental concepts in computer networks of the present and the future. In the past, the scarce and expensive resource in communication networks has been the bandwidth of transmission facilities. Accordingly, the techniques used for networking and switching have been chosen to optimize the efficient use of this resource. These techniques have differed according to the type of information carried: circuit switching for voice and packet switching for data. It is expected that elements of circuit and packet switching will be used in the integrated networks. This course focuses on packet switching for computer networks and protocol design. Topics in the course include: computer networks over-view; OSI layers, queueing theory; data link protocol; flow control; congestion control; routing; local area networks; transport layer. The current networks and applications will be introduced through the student seminars in the last weeks of the course.